记录编号 445254 评测结果 EEEEEEEEEEEEEEE
题目名称 数列操作B 最终得分 0
用户昵称 Gravatarswttc 是否通过 未通过
代码语言 C++ 运行时间 1.239 s
提交时间 2017-09-05 17:16:14 内存使用 7.18 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<queue>
  5. #define mid (l+r)/2
  6. #define ls o*2
  7. #define rs o*2+1
  8.  
  9. using namespace std;
  10.  
  11. long long n,m,sum[400000],a[100010],lazy[400000];
  12.  
  13. void buildt(long long l,long long r,long long o)
  14. {
  15. if(l==r)
  16. {
  17. sum[o]=a[l];
  18. return;
  19. }//
  20. buildt(l,mid,ls);
  21. buildt(mid+1,r,rs);
  22. sum[o]=sum[ls]+sum[rs];
  23. return;
  24. }
  25.  
  26. void pushdown(long long l,long long r,long long o)
  27. {
  28. if(l==r) return;
  29. lazy[ls]+=lazy[o];
  30. lazy[rs]+=lazy[o];
  31. sum[ls]+=lazy[o]*(mid-l+1);
  32. sum[rs]+=lazy[o]*(r-mid);
  33. lazy[o]=0;
  34. return;
  35. }
  36.  
  37. void add(long long l,long long r,long long o,long long ll,long long rr,long long x)
  38. {
  39. if(l>=ll&&r<=rr)
  40. {
  41. lazy[o]+=x;
  42. sum[o]+=(r-l+1)*x;//cout<<lazy[o]<<" "<<o<<endl;
  43. return;
  44. }
  45. pushdown(l,r,o);
  46. if(mid>=ll)
  47. {
  48. add(l,mid,ls,ll,rr,x);
  49. }
  50. if(mid<rr)
  51. {
  52. add(mid+1,r,rs,ll,rr,x);
  53. }
  54. sum[o]=sum[ls]+sum[rs];
  55. return;
  56. }
  57.  
  58. long long query(long long l,long long r,long long o,long long ll,long long rr)
  59. {//cout<<lazy[o]<<" "<<o<<endl;
  60. long long t=0;
  61. if(l>=ll&&r<=rr)
  62. {
  63. return sum[o];
  64. }
  65. pushdown(l,r,o);
  66. if(mid>=ll)
  67. {
  68. t+=query(l,mid,ls,ll,rr);
  69. }
  70. if(mid<rr)
  71. {
  72. t+=query(mid+1,r,rs,ll,rr);
  73. }
  74. return t;
  75. }
  76.  
  77. int main()
  78. {
  79. //cout<<(sizeof(sum)+sizeof(a)+sizeof(lazy))/1024/1024;
  80. freopen("shuliec.in","r",stdin);
  81. freopen("shuliec.out","w",stdout);
  82. scanf("%lld",&n);
  83. for(long long i=1;i<=n;i++)
  84. {
  85. scanf("%lld",&a[i]);
  86. }
  87. buildt(1,n,1);
  88. scanf("%lld",&m);
  89. for(long long i=1;i<=m;i++)
  90. {
  91. string s;
  92. cin>>s;
  93. if(s[0]=='A')
  94. {
  95. long long w,y,q;
  96. scanf("%lld%lld%lld",&w,&y,&q);
  97. add(1,n,1,w,y,q);
  98. //update(1,n,1,w,y);
  99. }
  100. else
  101. {
  102. long long y,q;
  103. scanf("%lld%lld",&y,&q);
  104. printf("%lld\n",query(1,n,1,y,q));
  105. }
  106. }
  107. return 0;
  108. }