码迷,mamicode.com
首页 > 其他好文 > 详细

线段树的构造,改变,查询

时间:2018-09-09 19:57:12      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:最大   i++   name   个数   ==   while   序列   include   mes   

给定一个包含n个数的序列,初值全为0,现对这个序列有两种操作:
操作1:把 给定 第k1 个数改为k2;
操作2:查询 从第k1个数到第k2个数得最大值。(k1<=k2<=n)

n<=100000;所有的数<=100000;

由于这里的n过大所以构造线段树。

 1 #include<iostream>
 2 #include<cmath>
 3 #include<ctime>
 4 #include<cstdio>
 5 #include<cstring>
 6 #include<string>
 7 #include<algorithm>
 8 #include<map>
 9 #include<vector>
10 #include<iomanip>
11 #include<queue>
12 #include<stack>
13 using namespace std;
14 inline int read()
15 {
16     int x=0,f=1;char ch=getchar();
17     while(ch<0||ch>9){if(ch==-)f=-1;ch=getchar();}
18     while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}
19     return x*f;
20 }
21 struct segment
22 {
23     int l,r;
24     int v;
25 }t[400009];
26 void build(int p,int l,int r)
27 {
28     t[p].l=l;t[p].r=r;
29     if(l==r){t[p].v=0;return;}
30     int mid=(l+r)/2;
31     build(p*2,l,mid);
32     build(p*2+1,mid+1,r);
33     t[p].v=max(t[p*2].v,t[p*2+1].v);
34 }
35 void change(int p,int x,int v)
36 {
37     if(t[p].l==t[p].r){t[p].v=v;return;}
38     int mid=(t[p].l+t[p].r)/2;
39     if(x<=mid)change(p*2,x,v);
40     else change(p*2+1,x,v);
41     t[p].v=max(t[p*2].v,t[p*2+1].v);
42 }  
43 int ask(int p,int l,int r)
44 {
45     if(l<=t[p].l&&r>=t[p].r) return t[p].v;
46     int mid=(t[p].l+t[p].r)/2;
47     int val=-100000;
48     if(l<=mid)val=max(val,ask(p*2,l,r));
49     if(r>mid)val=max(val,ask(p*2+1,l,r));
50     return val;
51 }
52 int n;
53 int main()
54 {
55     freopen("1.in","r",stdin);
56     n=read();
57     build(1,1,n);
58     for(int i=1;i<=n;i++)
59     {
60         int x,y,z;
61         x=read();y=read();z=read();
62         if(x==1)
63         {
64             change(1,y,z);
65         }
66         if(x==2)
67         {
68             int u=ask(1,y,z);
69             printf("%d\n",u);
70         }
71     }
72     return 0;
73 }
oj p1243

 

线段树的构造,改变,查询

标签:最大   i++   name   个数   ==   while   序列   include   mes   

原文地址:https://www.cnblogs.com/chdy/p/9614269.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!