线段树区间最值单点更新模板BNUOJ 52965 E Excellent Engineers

Posted shulin~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树区间最值单点更新模板BNUOJ 52965 E Excellent Engineers相关的知识,希望对你有一定的参考价值。

http://acm.bnu.edu.cn/v3/external/gym/101512.pdf

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 #define N 100010
 5 #define ls(p) (p<<1)
 6 #define rs(p) (p<<1|1)
 7 const int INF=1e9;
 8 struct node
 9 {
10     int a,b,c;
11 } p[N];
12 struct segment
13 {
14     int l,r,min;
15 } t[N<<2];
16 int n;
17 bool cmpa(const node &p,const node &q)
18 {
19     return p.a<q.a;
20 }
21 void build(int p,int l,int r)
22 {
23     t[p].l=l;t[p].r=r;
24     t[p].min=INF;
25     if(l==r)
26         return ;
27     int mid=l+r>>1;
28     build(ls(p),l,mid);
29     build(rs(p),mid+1,r);
30 }
31 int ask(int p,int l,int r)
32 {
33     if(l<=t[p].l && t[p].r<=r)
34         return t[p].min;
35     int mid=(t[p].l+t[p].r)>>1;
36     int ans=INF;
37     if(l<=mid) ans=min(ans,ask(ls(p),l,r));
38     if(mid<r) ans=min(ans,ask(rs(p),l,r));
39     return ans;
40 }
41 void change(int p,int x,int y)
42 {
43     if(t[p].l==t[p].r)
44     {
45         t[p].min=min(t[p].min,y);
46         return;
47     }
48     int mid=(t[p].l+t[p].r)>>1;
49     if(x<=mid) change(ls(p),x,y);
50     else change(rs(p),x,y);
51     t[p].min=min(t[ls(p)].min,t[rs(p)].min);
52 }
53 int main()
54 {
55     int T;
56     scanf("%d",&T);
57     while(T--)
58     {
59         scanf("%d",&n);
60         for(int i=1;i<=n;++i)
61         {
62             scanf("%d%d%d",&p[i].a,&p[i].b,&p[i].c);
63         }
64         sort(p+1,p+n+1,cmpa);
65         build(1,1,n);
66         int ans=0;
67         for(int i=1;i<=n;++i)
68         {
69             if(ask(1,1,p[i].b)>p[i].c) ++ans;
70             change(1,p[i].b,p[i].c);
71         }
72         printf("%d\n",ans);
73     }
74 }
View Code

 

以上是关于线段树区间最值单点更新模板BNUOJ 52965 E Excellent Engineers的主要内容,如果未能解决你的问题,请参考以下文章

HDU 1754 I Hate It(线段树单点更新区间查询最值)

线段树及其基本操作

51nod1287(二分/线段树区间最值&单点更新)

HDU 1754 I Hate It(线段树之单点更新,区间最值)

hdu 1754 I Hate It(线段树之 单点更新+区间最值)

hdu2795(线段树单点更新&区间最值)