NBUT 1680 卖瓜(线段树)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 卖瓜(线段树)的主要内容,如果未能解决你的问题,请参考以下文章

NBUT 1525 Cow Xor(01字典树+前缀思想)

微博数据爬取 之 “保熟”的爬虫

线段树-代码实现细节与技巧

线段树

CCF(除法):线段树区间修改(50分)+线段树点修改(100分)+线段树(100分)

线段树合并