首页 > 代码库 > NBUT 1680 卖瓜(线段树)

NBUT 1680 卖瓜(线段树)

题目链接:https://ac.2333.moe/Problem/view.xhtml?id=1680

题意:中文题

现在看觉得就是道水题,罒ω罒。

但是几天前比赛的时候没写出来,写下题解纪念一波,≡ ̄﹏ ̄≡。

 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4  5 int ans1,ans2; 6 const int INF=0x3f3f3f3f; 7 const int N=11111; 8 struct Tree{ 9     int l,r;10     int MAX,MIN;11 };12 Tree tree[4*N];13 14 void pushup(int x){15     int tmp=x<<1;16     tree[x].MAX=max(tree[tmp].MAX,tree[tmp+1].MAX);17     tree[x].MIN=min(tree[tmp].MIN,tree[tmp+1].MIN);    18 }19 20 void build(int l,int r,int x){21     tree[x].l=l;22     tree[x].r=r;23     if(l==r){24         scanf("%d",&tree[x].MAX);25         tree[x].MIN=tree[x].MAX;26         return ;27     }    28     int tmp=x<<1;29     int mid=(l+r)>>1;30     build(l,mid,tmp);31     build(mid+1,r,tmp+1);32     pushup(x);33 }34 35 void update(int l,int r,int value,int x){36     if(tree[x].l>r||tree[x].r<l) return ;37     if(l==tree[x].l&&r==tree[x].r){38         tree[x].MAX=value;39         tree[x].MIN=value;40         return ;41     }42     int tmp=x<<1;43     update(l,r,value,tmp);44     update(l,r,value,tmp+1);45     pushup(x);46 }47 48 void query(int l,int r,int x){49     if(r<tree[x].l||l>tree[x].r) return ;50     if(l<=tree[x].l&&r>=tree[x].r){51         ans1=max(ans1,tree[x].MAX);52         ans2=min(ans2,tree[x].MIN);53         return ;54     }55     int tmp=x<<1;56     int mid=(tree[x].l+tree[x].r)>>1;57     if(r<=mid) query(l,r,tmp);58     else if(l>mid) query(l,r,tmp+1);59     else{60         query(l,mid,tmp);61         query(mid+1,r,tmp+1);62     }63 }64 65 int main(){66     int t,n,q;67     scanf("%d",&t);68     for(int k=1;k<=t;k++){69         scanf("%d %d",&n,&q);70         build(1,n,1);71         int op,l,r;72         for(int i=1;i<=q;i++){73             scanf("%d %d %d",&op,&l,&r);74             if(op==1){    75                 ans1=-1;76                 ans2=INF;77                 query(l,r,1);78                 printf("%d\n",ans1-ans2);79             }80             else if(op==2){81                 update(l,l,r,1);82             }83         }84     }85     return 0;86 }

 

NBUT 1680 卖瓜(线段树)