当前位置: 代码迷 >> 综合 >> vjudge: spoj--to the moon(主席树区间修改)
  详细解决方案

vjudge: spoj--to the moon(主席树区间修改)

热度:14   发布时间:2024-01-04 12:43:44.0

题目大意:

       题目大意:给定一些数字,有以下几个操作

       a、[L,R]区间的数字变化D的数值。并且时间向前推进

       b、询问某个时间的[L,R]区间的数字之和,这不花费时间

       c、回到X时间。

 

 

可持久话线段树裸题。

 

其实区间修改就体现了,只要主席树更新的节点,就要重建。

就本题而言,区间加我可以搞成标记永久化,防止pushdown新建太多的节点,感觉尽量不要通过pushdown加太多节点,想办法搞成标记永久化

 

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<stack>
using namespace std;
const int N=100005;
typedef long long ll;struct aa
{int lc,rc,l,r;ll add,sum;int len(){return r-l+1;}
}a[N*4*200];int n,m,rt[N],time,tot;void build(int &u,int l,int r)
{u=++tot;a[u].l=l,a[u].r=r;if (l==r) {scanf("%lld",&a[u].sum);return ;}int mid=(l+r)>>
  相关解决方案