一道线段树的区间修改题,和POJ3468非常类似,都是利用lazy-tag来加快速度,lazy-tag在中有说明。不同之处在于这里是更改stick的类型,所以对tag直接赋值就行了。另外,初始的stick为1,所以在建树的时候需要注意。
#include#include #define MAX_HOOK 100005struct node{ int left; int right; int sum; int tag;}stick[4*MAX_HOOK];void build(int,int,int);void update(int,int,int,int);void pushdown(int);void pushup(int);int query(int,int,int);int main(){ int t,cas=1; scanf("%d",&t); while(t--) { int n,q,i; scanf("%d",&n); memset(stick,0,sizeof(stick)); build(1,1,n); scanf("%d",&q); for(i=0;i =stick[root].right) { stick[root].sum=(stick[root].right-stick[root].left+1)*val; stick[root].tag=val; return ; } if(le>stick[root].right||ri=stick[root].right) { return stick[root].sum; } if(le>stick[root].right||ri