题意:

最大$10^9$的区间,

$3*10^5$次区间修改,每次操作后求整个区间的和

题解:

裸的动态开点线段树,计算清楚数据范围是关键...

经过尝试

$2*10^7$会$MLE$

$10^7$会$RE$

用$vector$但是一开始没有$resize$到最大也会$MLE$

如果节点内部信息保存了节点的区间,无论怎么样都会$MLE$

最终$1.5*10^7$的$vector$/数组可以过

#include <bits/stdc++.h>
#define endl '\n'
#define ll long long
#define IO ios::sync_with_stdio(false);cin.tie(0);cout.tie(0)
#define rep(ii,a,b) for(int ii=a;ii<=b;++ii)
using namespace std;
int casn,n,m,k;
const int maxn=1e7+5e6+7;
class dsegtree{public:
#define nd  node[now]
#define ndl node[node[now].son[0]]
#define ndr node[node[now].son[1]]struct dsegnode {int son[2],tag,sum;dsegnode(){}dsegnode(int s,int t){sum=t-s+1,tag=son[0]=son[1]=0;}void update(int x,int len){sum=len*(x-1),tag=x;}};vector<dsegnode> node;int root,cnt,n,s,t;dsegtree(int nn,int size=maxn){n=nn;node.resize(maxn);node[1]=dsegnode(1,n);cnt=root=1;}void pushup(int now){nd.sum=ndl.sum+ndr.sum;}void pushdown(int now,int s,int t){if(nd.tag){ndl.update(nd.tag,(t+s)/2-s+1);ndr.update(nd.tag,t-((t+s)/2+1)+1);nd.tag=0;}}void update(int ss,int tt,int x){s=ss,t=tt,update(1,n,x,root);}void update(int l,int r,int x,int now){if(s>r||t<l)return ;if(s<=l&&t>=r) {nd.update(x,r-l+1);return ;}if(!nd.son[0]){node[++cnt]=dsegnode(l,(l+r)>>1);nd.son[0]=cnt;}if(!nd.son[1]){node[++cnt]=dsegnode(((l+r)>>1)+1,r);nd.son[1]=cnt;}pushdown(now,l,r);update(l,(l+r)>>1,x,nd.son[0]);update(((l+r)>>1)+1,r,x,nd.son[1]);pushup(now);}
};int main() {IO;ll n,m;cin>>n>>m;dsegtree tree(n);int a,b,c;while(m--){cin>>a>>b>>c;tree.update(a,b,c);cout<<tree.node[tree.root].sum<<endl;}return 0;
}

91

题解5

转载于:https://www.cnblogs.com/nervendnig/p/10233650.html

codeforces 915E - Physical Education Lessons 动态开点线段树相关推荐

  1. CF915E Physical Education Lessons(珂朵莉树)

    中文题面 据说正解是动态开点线段树而且标记也不难下传的样子 然而这种区间推平的题目还是喜欢写珂朵莉树啊--码量小-- 虽然真要构造的话随便卡-- 1 //minamoto 2 #include< ...

  2. 【线段树合并】解题报告:luogu P4556雨天的尾巴 (树上对点差分 + 动态开点 + 线段树合并)线段树合并模板离线/在线详解

    题目链接:雨天的尾巴 本题本身是一个非常简单的一道树上差分的模板题,但是由于变态的数据范围,我们直接用数组是存不下的(本来使用一颗普通的线段树直接维护最大值即可.但是本题的空间只有128MB,直接按照 ...

  3. 洛谷P3960 列队(动态开节点线段树)

    题意 题目链接 Sol 看不懂splay..,看不懂树状数组... 只会暴力动态开节点线段树 观察之后不难发现,我们对于行和列需要支持的操作都是相同的:找到第\(k\)大的元素并删除,在末尾插入一个元 ...

  4. 动态开点线段树(多棵线段树)的内存分配与回收

    前言 线段树,是一个很好用的能支持O(logn)区间操作的数据结构,随着做一些稍微烦一点的题,有时候会发现有些情况要开一个数组的线段树,更有甚者要树套树,而在很多情况下线段树就不能把所有点都开满了(否 ...

  5. CF1045G AI robots(动态开点线段树)

    题意 火星上有$N$个机器人排成一行,第$i$个机器人的位置为$x_{i}$,视野为$r_{i}$,智商为$q_{i}$.我们认为第$i$个机器人可以看到的位置是$[x_{i}-r_{i},x_{i} ...

  6. NOIP2017 列队——动态开点线段树

    Description: Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵的行数为  ...

  7. HDU 6681 Rikka with Cake(扫描线、动态开点线段树)

    http://acm.hdu.edu.cn/showproblem.php?pid=6681 题意 在矩形区域内有k条射线,问这些射线将矩形分成了多少区域 题解 容易发现答案为所有射线交点个数+1. ...

  8. 洛谷P3120 [USACO15FEB]牛跳房子(动态开节点线段树)

    题意 题目链接 Sol \(f[i][j]\)表示前\(i\)行\(j\)列的贡献,转移的时候枚举从哪里转移而来,复杂度\(O(n^4)\) 然后考虑每一行的贡献,动态开节点线段树维护一下每种颜色的答 ...

  9. CodeForces - 960F[动态开点线段树优化dp]详解

    题意:给一张有向图,每条边有边权与编号,求一条最长的路径,这条路径的边权与编号都是递增的.(编号指输入顺序) 首先我们回忆一下普通得LIS得做法:就是dp[i]以第i个结尾得最长上升子序列的长度,那么 ...

最新文章

  1. Linux编译mybatis,使用mybatis assembly插件打成tar包,在linux系统中运行服务-Go语言中文社区...
  2. C#调用ArcGIS REST服务
  3. pthread_mutex_lock用法
  4. adb logcat 命令行用法
  5. cookie版购物车
  6. Sublime Text3 配置设置攻略
  7. 永乐XIANDAI 08
  8. 【PAT甲级 前导0,排序】1069 The Black Hole of Numbers (20 分) C++ 全部AC
  9. Spring–添加SpringMVC –第1部分
  10. python爬取京东商品信息代码_Python利用Xpath选择器爬取京东网商品信息
  11. linux的定制和发布(二)
  12. WordPress SEO 完全指南
  13. Python爬上不得姐 并将段子写入数据库
  14. linux mysql数据库升级_Linux升级mysql到5.7
  15. perl语言书籍教程推荐
  16. 产品需求分析工具和方法
  17. Unity Asset Store——独立游戏开发者的素材插件商店
  18. 福昕软件发布福昕高级PDF编辑器 for Linux
  19. mysql分页查询与ES分页查询解析
  20. ps怎么打开php图片大小,如何使用ps修改图片尺寸

热门文章

  1. 老男孩mysql备份脚本_老男孩-标杆班级-MySQL-lesson07-备份恢复
  2. 田忌赛马 c++ 源代码
  3. CISP-PTE 基础讲解
  4. authcode java_Java支付宝授权第三方登陆
  5. php快递100查询
  6. 骁龙435和骁龙625处理器哪个好?
  7. Flutter删除缓存
  8. 《MySQL 入门教程》第 28 篇 字符集与排序规则
  9. Onethink管理平台后台可get webshell
  10. CSS(Cascading Style Sheet)