首页 > 代码库 > HIHO 线段树(单点)
HIHO 线段树(单点)
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 #include <iostream> 5 #include <algorithm> 6 using namespace std; 7 const int MM=1000000;//10^6 8 int num[MM<<2]; 9 void buildtree(int l,int r,int id)10 {11 if(l==r)12 {scanf("%d",&num[id]);return;}13 else14 {15 int mid=(r+l)>>1;16 buildtree(l,mid,id<<1);17 buildtree(mid+1,r,id<<1|1);18 }19 num[id]=min(num[id<<1],num[id<<1|1]);20 21 }22 int query(int L,int R,int l,int r,int id)23 {24 int minn=0x7fffffff;25 if (L <= l && r <= R) {26 return num[id];27 } 28 else {29 int mid=(r+l)>>1;30 if(L<=mid)minn=min(minn,query(L,R,l,mid,id<<1));31 if(R>mid)minn=min(minn,query(L,R,mid+1,r,id<<1|1));32 num[id]=min(num[id<<1], num[id<<1|1]);33 return minn;34 }35 }36 void change(int pos,int e,int l,int r,int id)37 {38 if(l==r)39 {num[id]=e;return;}40 else41 {42 int mid=(r+l)>>1;43 if(pos<= mid)44 change(pos,e,l,mid,id<<1);45 else change(pos,e,mid+1,r,id<<1|1);46 }47 num[id]=min(num[id<<1],num[id<<1|1]);48 49 }50 int main(){51 int i,n,que,number,x,y,z;52 n=1;53 while(n--)54 {55 cin>>number;56 buildtree(1,number,1);57 cin>>que;58 //cout << "ok" << endl;59 for(i=0;i<que;i++)60 {61 scanf("%d%d%d",&x,&y,&z);62 //cout << x << " " << y << " " << z << endl;63 if(x==0)64 {65 int ans=query(y,z,1,number,1);66 printf("%d\n",ans );67 }68 else change(y,z,1,number,1);69 }70 71 }72 return 0;73 }
HIHO 线段树(单点)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。