hdu1166线段树水题

来源:互联网 发布:淘宝哪里给买家评价 编辑:程序博客网 时间:2024/05/18 12:42

线段树很有用噢!

多练练,lazy思想是什么呢,下一题学一下。

题意:对一个数组进行更改,和查询区间之和.

 

#include<iostream>#include<cstdio>using namespace std;struct segtree{    int l;    int r;    int mid;    int max;    int sum;}T[600011];int max(int a,int b){    return a>b?a:b;}void construct(int l,int r,int k)  //二叉树{    T[k].l=l;    T[k].r=r;    T[k].mid=(l+r)/2;    //T[k].max=-1;    T[k].sum=0;    if(l==r)    return ;    construct(l,T[k].mid,2*k);    construct(T[k].mid+1,r,2*k+1);}void insert(int n,int d,int k){    //if(T[k].l==T[k].r&&T[k].l==d)   {T[k].max=n;return ;}   //元线段处理    if(T[k].l==T[k].r&&T[k].l==d)   {T[k].sum+=n;return ;}                                                        //查找该插入的位置    if(d<=T[k].mid)  insert(n,d,2*k);    else            insert(n,d,2*k+1);    T[k].sum=T[2*k].sum+T[2*k+1].sum;             //给该线段节点更新sum}int ans;void search(int l,int r,int k)              //类似深搜{    //if(T[k].l==l&&T[k].r==r)    {ans=max(ans,T[k].max);return ;}    if(T[k].l==l&&T[k].r==r)    {ans+=T[k].sum;return ;}    if(r<=T[k].mid)      search(l,r,2*k);    else if(l>T[k].mid)  search(l,r,2*k+1);    else    {        search(l,T[k].mid,2*k);        search(T[k].mid+1,r,2*k+1);    }}int main(){    int n,m;    int temp;    int i;    int T;    int a,b,t;    cin>>T;    t=T;    while(T--)    {        scanf("%d",&n);        construct(1,n,1);        for(int i=1;i<=n;i++)        {            int x;            scanf("%d",&x);            insert(x,i,1);        }        printf("Case %d:\n",(t-T));        char s[8];        while(1)        {            getchar();            scanf("%s",s);            if(s[0]=='E') break;            scanf("%d%d",&a,&b);            if(s[0]=='Q')            {                if(a>b)swap(a,b);                ans=0;                search(a,b,1);                printf("%d\n",ans);            }            if(s[0]=='A')            {                insert(b,a,1);            }            if(s[0]=='S')            {                insert(-b,a,1);            }        }    }    return 0;}


 

原创粉丝点击