fork(1) download
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4.  
  5. long long int segT[32];//[1200000];
  6. int R=7;//262143;
  7.  
  8. long long int fSet(int no,int p1,int l2,int r2,long long int num){
  9. if(r2<p1 || p1<l2)return segT[no];
  10. if(l2==r2){
  11. segT[no]=num;
  12. return segT[no];
  13. }
  14. int m=(l2+r2)/2;
  15. if(l2<=p1 && p1<=m){
  16. segT[no]=fSet(no*2+1,p1,l2,m,num);
  17. return segT[no];
  18. }else{
  19. long long int res1=segT[no*2+1];
  20. long long int res2=fSet(no*2+2,p1,m+1,r2,num);
  21. if(res1==-1 || res2==-1){
  22. segT[no]=-1;
  23. }else if(res1==res2){
  24. segT[no]=res1;
  25. }else{
  26. segT[no]=-1;
  27. }
  28. return segT[no];
  29. }
  30. }
  31. long long int fAdd(int no,int p1,int l2,int r2,long long int add){
  32. if(r2<p1 || p1<l2)return segT[no];
  33. if(l2==r2){
  34. segT[no]+=add;
  35. return segT[no];
  36. }
  37. int m=(l2+r2)/2;
  38. long long int res1=-1;
  39. long long int res2=-1;
  40. if(l2<=p1 && p1<=m){
  41. res1=fAdd(no*2+1,p1,l2,m,add);
  42. res2=segT[no*2+2];
  43. }else{
  44. res1=segT[no*2+1];
  45. res2=fAdd(no*2+2,p1,m+1,r2,add);
  46. }
  47. if(res1==-1 || res2==-1){
  48. segT[no]=-1;
  49. }else if(res1==res2){
  50. segT[no]=res1;
  51. }else{
  52. segT[no]=-1;
  53. }
  54. return segT[no];
  55. }
  56. long long int fCheck(int no,int l,int r,int l2,int r2,long long int resA){
  57. if(r2<l || r<l2)return resA;
  58. if(l2==r2){
  59. return segT[no];
  60. }
  61. if(l<=l2 && r2<=r){
  62. return segT[no];
  63. }else{
  64. int m=(l2+r2)/2;
  65. long long int res1=fCheck(no*2+1,l,r,l2,m,segT[no*2+1]);
  66. long long int res2=fCheck(no*2+2,l,r,m+1,r2,segT[no*2+2]);
  67. if(res1==-1 || res2==-1){
  68. return -1;
  69. }else if(res1==res2){
  70. return res1;
  71. }else{
  72. return -1;
  73. }
  74. }
  75. }
  76.  
  77.  
  78.  
  79. int main() {
  80. int n,m;
  81. cin>>n>>m;
  82. memset(segT,-1,sizeof(segT));
  83. for(int i=0;i<n;i++){
  84. long long int num;
  85. cin>>num;
  86. fSet(0,i,0,R,num);
  87. }
  88. for(int i=0;i<m;i++){
  89. int c1;
  90. cin>>c1;
  91. if(c1==1){
  92. int p1,add;
  93. cin>>p1>>add;
  94. p1--;
  95. fAdd(0,p1,0,R,add);
  96. }else{
  97. int l,r;
  98. cin>>l>>r;
  99. l--;
  100. r--;
  101. if(fCheck(0,l,r,0,R,segT[0])==-1){
  102. cout<<"No"<<endl;
  103. }else{
  104. cout<<"Yes"<<endl;
  105. }
  106. }
  107. for(int i=0;i<15;i++){
  108. cout<<"("<<i<<","<<segT[i]<<")";
  109. }
  110. cout<<endl;
  111. }
  112.  
  113. return 0;
  114. }
Success #stdin #stdout 0.01s 5288KB
stdin
5 3
0 1 0 1 0
2 2 4
1 3 1
2 2 4
stdout
No
(0,-1)(1,-1)(2,0)(3,-1)(4,-1)(5,0)(6,-1)(7,0)(8,1)(9,0)(10,1)(11,0)(12,-1)(13,-1)(14,-1)
(0,-1)(1,-1)(2,0)(3,-1)(4,1)(5,0)(6,-1)(7,0)(8,1)(9,1)(10,1)(11,0)(12,-1)(13,-1)(14,-1)
No
(0,-1)(1,-1)(2,0)(3,-1)(4,1)(5,0)(6,-1)(7,0)(8,1)(9,1)(10,1)(11,0)(12,-1)(13,-1)(14,-1)