fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. const double eps=1e-11;
  5. typedef long long ll;
  6. typedef long long int lli;
  7. typedef unsigned long long ull;
  8. typedef long double ld;
  9. #define MAX 1000000
  10.  
  11. void scan_int(int *n){
  12. int tmp=0;
  13. char ch;
  14. int len=fread(&ch,sizeof(char),1,stdin);
  15. while((ch < '0' || ch > '9') && len>0 ) len=fread(&ch,sizeof(char),1, stdin);
  16. while( ch >= '0' && ch <= '9' && len>0 ){
  17. tmp = (tmp<<3)+(tmp<<1) + ch-'0';
  18. len=fread(&ch,sizeof(char),1, stdin);
  19. }
  20. *n=tmp;
  21. }
  22.  
  23. int main()
  24. {
  25. int n,q;
  26. lli *a;
  27. a=(lli*)malloc(MAX*sizeof(lli));
  28. long long cng[50000];
  29. long long loc[50000];
  30. fscanf(stdin,"%d",&n);
  31. fscanf(stdin,"%d",&q);
  32. int i=0;
  33. char ch;
  34. int c,d,tmp2;
  35. fscanf(stdin,"%d",&tmp2);
  36. a[i]=tmp2; i++;
  37.  
  38. while(i<n){
  39. scan_int(&tmp2);
  40. a[i]=tmp2+a[i-1];
  41. i++;
  42. }
  43. lli sum,idx=0;
  44. while(q--){
  45. ch='@';
  46. sum=0;
  47. while(ch!='S'&&ch!='T'&&ch!='G') fread(&ch,sizeof(char),1,stdin);
  48. scan_int(&c); scan_int(&d);
  49. if(ch=='S'){
  50. if(c==0) sum=a[d];
  51. else sum=a[d]-a[c-1];
  52. for(i=0;i<idx;i++) if(loc[i]>=c && loc[i]<=d) sum+=cng[i];
  53. fprintf(stdout,"%lld\n",sum);
  54. }else if(ch=='G'){
  55. cng[idx]=d;
  56. loc[idx++]=c;
  57. }else{
  58. cng[idx]=-d;
  59. loc[idx++]=c;
  60. }
  61. }
  62.  
  63. return 0;
  64. }
Success #stdin #stdout 0s 10776KB
stdin
5 3
1000 1002 1003 1004 1005
S 0 2
G 0 3
S 0 2
stdout
3005
3008