簡單的線段樹區間求和問題,每次改變區間值得時候採用懶標記的操作,等到下次經過這個區間的時候再將懶標記向下傳遞。
#include #include using namespace std;
int n,q;
int a[100005];
long long sum[500005],lazy[500005];
void build(int l,int r,int k)
int mid=(l+r)>>1;
build(l,mid,2*k);
build(mid+1,r,2*k+1);
sum[k]=sum[2*k]+sum[2*k+1];
}void pushdown(int m,int k)
}long long work(int l,int r,int k,int l,int r)
pushdown(r-l+1,k);
int mid=(l+r)>>1;
if (r<=mid) return work(l,mid,2*k,l,r);
else if (l>mid) return work(mid+1,r,2*k+1,l,r);
else return work(l,mid,2*k,l,mid)+work(mid+1,r,2*k+1,mid+1,r);
}void change(int l,int r,int k,int l,int r,int val)
pushdown(r-l+1,k);
int mid=(l+r)>>1;
if (r<=mid) change(l,mid,2*k,l,r,val);
else if(l>mid) change(mid+1,r,2*k+1,l,r,val);
else
sum[k]=sum[2*k]+sum[2*k+1];
}int main()
{ scanf("%d%d",&n,&q);
for (int i=0;i
線段樹模板 (poj 3468)延遲標記
參考了胡浩大牛的 風格。include define lson l,m,rt 1 define rson m 1,r,rt 1 1 const int maxn 100010 long long add maxn 4 1 long long sum maxn 4 1 void pushup int ...
poj3468之線段樹
include include include include include include include include include define inf 99999999 using namespace std const int max 100000 10 int64 sum max ...
POJ 3468 線段樹區間
這個題目是第二個區間修改的線段樹了,做到現在可以發現線段樹真的非常的靈活,特別是區間修改部分,前面的單點修改其實還是也可參看模版的,區間修改就真的非常靈活了了。這個題目就是區間加法,然後求乙個累加和,同樣地也是需要乙個延遲標誌的,也就是lazy,然後還需要乙個統計當前區間的全部和的陣列。就可以輕鬆解...