记录编号 440475 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作B 最终得分 100
用户昵称 GravatarTwist Fate 是否通过 通过
代码语言 C++ 运行时间 3.463 s
提交时间 2017-08-23 10:15:08 内存使用 2.61 MiB
显示代码纯文本
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cstdio>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <algorithm>
  7. #include <queue>
  8. #include <stack>
  9. #include <map>
  10. #include <set>
  11. #include <list>
  12. #include <vector>
  13. #include <ctime>
  14. #include <iterator>
  15. #include <functional>
  16. #define pritnf printf
  17. #define scafn scanf
  18. #define For(i,j,k) for(int i=(j);i<=(k);(i)++)
  19. using namespace std;
  20. typedef long long LL;
  21. typedef unsigned int Uint;
  22. const int INF=0x7ffffff;
  23. //==============struct declaration==============
  24. const int MAXN=100100;
  25. int sum[MAXN*3],addv[MAXN*3];
  26. #define y1 y
  27. int y1,y2,k,v,n,q;
  28. string cmd;
  29. //==============function declaration============
  30. void add(int o,int l,int r);
  31. int query(int o,int l,int r,int add);
  32. void maintain(int o,int l,int r);
  33. //==============main code=======================
  34. int main()
  35. {
  36. string FileName="shulieb";//程序名
  37. string FloderName="COGS";//文件夹名
  38. freopen((FileName+".in").c_str(),"r",stdin);
  39. freopen((FileName+".out").c_str(),"w",stdout);
  40. #ifdef DEBUG
  41. system(("cp C:\\Users\\Administrator\\Desktop\\"+FloderName+"\\standard.cpp C:\\Users\\Administrator\\Desktop\\"+FloderName+"\\submit.txt").c_str());
  42. clock_t Start_Time=clock();
  43. #endif
  44. ios::sync_with_stdio(false);
  45. cin>>n;
  46. For(i,1,n){
  47. cin>>v;
  48. y1=y2=i;
  49. add(1,1,n);
  50. }
  51. cin>>q;
  52. For(i,1,q){
  53. cin>>cmd;
  54. if (cmd[0]=='A'){
  55. cin>>y1>>y2>>v;
  56. add(1,1,n);
  57. }
  58. else if (cmd[0]=='Q'){
  59. cin>>k;
  60. cout<<query(1,1,n,0)<<endl;
  61. }
  62. }
  63. #ifdef DEBUG
  64. clock_t End_Time=clock();
  65. printf("\n\nTime Used: %.4lf Ms\n",double(End_Time-Start_Time)/CLOCKS_PER_SEC);
  66. #endif
  67. return 0;
  68. }
  69. //================fuction code====================
  70. void add(int o,int l,int r)
  71. {
  72. int lc=o*2,rc=o*2+1,m=(l+r)>>1;
  73. if (y1<=l&&r<=y2){
  74. sum[o]+=(r-l+1)*v;
  75. addv[o]+=v;
  76. return;
  77. }
  78. if (m>=y1)
  79. add(lc,l,m);
  80. if (m<y2)
  81. add(rc,m+1,r);
  82. maintain(o,l,r);
  83. }
  84. int query(int o,int l,int r,int add)
  85. {
  86. int lc=o*2,rc=o*2+1,m=(l+r)>>1;
  87. if (l==r)
  88. return add+sum[o];
  89. int res=0;
  90. if (m>=k)
  91. return query(lc,l,m,add+addv[o]);
  92. if(m<k)
  93. return query(rc,m+1,r,add+addv[o]);
  94. }
  95. void maintain(int o,int l,int r)
  96. {
  97. int lc=o*2,rc=o*2+1,m=(l+r)>>1;
  98. if (l!=r)
  99. sum[o]=sum[lc]+sum[rc]+addv[o]*(r-l+1);
  100. }