记录编号 440229 评测结果 AAAAAAAAAAAAAAA
题目名称 数列操作A 最终得分 100
用户昵称 Gravatarliuyu 是否通过 通过
代码语言 C++ 运行时间 0.991 s
提交时间 2017-08-22 20:31:44 内存使用 1.46 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int n,m,A[100000+10],sum[200008],s,t,ans;
  5. char d[10];
  6.  
  7. void build(int o,int l,int r){
  8. int lc=o*2,rc=o*2+1;
  9. int m=l+(r-l)/2;
  10. if(l==r)sum[o]=A[l];
  11. else {
  12. build(lc,l,m),build(rc,m+1,r);
  13. sum[o]=sum[lc]+sum[rc];
  14. }
  15. }
  16. void sumans(int o,int l,int r){
  17. int lc=o*2,rc=o*2+1;
  18. int m=l+(r-l)/2;
  19. if(s<=l&&t>=r){
  20. ans+= sum[o];
  21. return ;
  22. }
  23. if(s<=m)sumans(lc,l,m);
  24. if(t>m)sumans(rc,m+1,r);
  25. }
  26. void add(int o,int l,int r)
  27. {
  28. int lc=o*2,rc=o*2+1;
  29. int m=l+(r-l)/2;
  30. if(l==r)sum[o]+=t;
  31. else{
  32. if(s<=m)add(lc,l,m);
  33. if(s>m)add(rc,m+1,r);sum[o]=sum[rc]+sum[lc];
  34. }
  35. }
  36. int main()
  37. {
  38. freopen("shulie.in","r",stdin);
  39. freopen("shulie.out","w",stdout);
  40. scanf("%d",&n);
  41. for(int i=1;i<=n;i++)scanf("%d",&A[i]);
  42. scanf("%d",&m);
  43. build(1,1,n);
  44. while(m--){
  45. scanf("%s%d%d",d,&s,&t);
  46. if(d[0]=='S'){
  47. ans=0;
  48. sumans(1,1,n);
  49. printf("%d\n",ans);
  50. }
  51. else {
  52. add(1,1,n);
  53. }
  54. }
  55. return 0;
  56. }