Guest User

Untitled

a guest
Jan 16th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cstdlib>
  4. #include <algorithm>
  5. #include <vector>
  6. #include <iostream>
  7. #include <sstream>
  8. #include <climits>
  9. #define N 100000
  10. using namespace std;
  11. int n;
  12. int tree[4*N+1],c[N+1];
  13.  
  14. void init(int node,int a,int b){
  15. if(a==b){
  16. tree[node]=c[a];
  17. return;
  18. }
  19. init(2*node+1,a,(a+b)/2);
  20. init(2*node+2,(a+b)/2+1,b);
  21. tree[node]=min(tree[2*node+1],tree[2*node+2]);
  22. }
  23.  
  24. int query(int node,int a,int b,int p,int q){
  25. if(q<a || b<p)return INT_MAX;
  26. if(a>=p && b<=q){
  27. return tree[node];
  28. }
  29. int v1=2*node+1;
  30. int v2=2*node+2;
  31. return min(query(v1,a,(a+b)/2,p,q),query(v2,(a+b)/2+1,b,p,q));
  32. }
  33.  
  34. void update(int node,int a,int b,int p,int val){
  35. if(b<p || p<a)return;
  36. if(a==b){
  37. tree[node]=val;
  38. return;
  39. }
  40. update(2*node+1,a,(a+b)/2,p,val);
  41. update(2*node+2,(a+b)/2+1,b,p,val);
  42. tree[node]=min(tree[2*node+1],tree[2*node+2]);
  43. return;
  44. }
  45.  
  46. int main(){
  47. int n,t,x;
  48. char s[40];
  49. scanf("%d%d",&n,&t);
  50. for(int i=0;i<n;++i){
  51. scanf("%d",&c[i]);
  52. }
  53. init(0,0,n-1);
  54. gets(s);
  55. for(int i=0;i<t;++i){
  56. vector<int>v,aux;
  57. bool val=0;
  58. gets(s);
  59. if(s[0]=='q')val=1;
  60. for(int i=0;i<strlen(s);++i){
  61. if(s[i]>='0' && s[i]<='9'){
  62. }
  63. else s[i]=' ';
  64. }
  65. istringstream in(s);
  66. while(in>>x){
  67. v.push_back(x-1);
  68. }
  69. if(val){
  70. printf("%d",query(0,0,n-1,v[0],v[1]));
  71. puts("");
  72. }
  73. else{
  74. for(int i=0;i<v.size();++i){
  75. aux.push_back(c[v[i]]);
  76. }
  77. for(int i=0;i<v.size()-1;++i){
  78. c[v[i]]=aux[i+1];
  79. update(0,0,n-1,v[i],aux[i+1]);
  80. }
  81. if(v.size()>=1){
  82. c[v[v.size()-1]]=aux[0];
  83. update(0,0,n-1,v[v.size()-1],aux[0]);
  84. }
  85. }
  86. }
  87. }
Add Comment
Please, Sign In to add comment