fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. /*#include<ext/pb_ds/assoc_container.hpp>
  4. #include<ext/pb_ds/tree_policy.hpp>
  5. using namespace __gnu_pbds;
  6. /*template <typename T>
  7. using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
  8. */typedef long long ll;
  9. typedef long double ld;
  10. typedef pair<ll,ll> pl;
  11. typedef pair<int,int> pii;
  12.  
  13. #define LOCAL 0
  14. #define dbg(x) cerr << #x << " is " << x << " "
  15. #define gll(x) scanf("%lld",&x)
  16. #define gll2(x,y) scanf("%lld%lld",&x,&y)
  17. #define gll3(x,y,z) scanf("%lld%lld%lld",&x,&y,&y)
  18. #define gllarr(arr,n) f(i,n) gll(arr[i]);
  19. #define sz(x) ((int)x.size())
  20. #define s(x) sort(x.begin(),x.end())
  21. #define all(v) v.begin(),v.end()
  22. #define rs(v) { s(v) ; r(v) ; }
  23. #define r(v) {reverse(all(v));}
  24. #define pb push_back
  25. #define mp make_pair
  26. #define F first
  27. #define S second
  28. #define f(i,n) for(int i=0;i<n;i++)
  29. #define fr(i,n) for(int i=n-1;i>=0;i--)
  30. #define rep(i,a,b) for(int i=a;i<=b;i++)
  31. #define repr(i,a,b) for(int i=a;i>=b;i--)
  32.  
  33. const ll mod = 1000000007;
  34. const ll inf = (ll)1e16;
  35. const ld eps = 1e-12;
  36. const ll N = (int)1e5+5;
  37. const ll LOGN = 19;
  38. const ld PI = 3.14159265358979323846;
  39.  
  40. ll mul(ll a, ll b, ll m = mod) { return (ll)(a * b) % m;}
  41. ll add(ll a, ll b, ll m = mod) { a += b; if(a >= m) a -= m; if(a < 0) a += m; return a;}
  42. ll power(ll a, ll b, ll m = mod) { if(b == 0) return 1; if(b == 1) return (a % m); ll x = power(a, b / 2, m); x = mul(x, x, m); if(b % 2) x = mul(x, a, m); return x;}
  43.  
  44. int main()
  45. {
  46. ios_base::sync_with_stdio(false);
  47. cin.tie(NULL);
  48. if(LOCAL)
  49. {
  50. //freopen("C:\\Users\\Dishant\\Desktop\\Collection-DEV c++\\input.txt","r",stdin);
  51. //freopen("C:\\Users\\Dishant\\Desktop\\Collection-DEV c++\\output.txt","w",stdout);
  52. }
  53. ll n;
  54. cin>>n;
  55. ll a[n];
  56. f(i,n)
  57. cin>>a[i];
  58. ll pre[n+1];
  59. vector<ll> add1;
  60. //add.pb(0);
  61. pre[0] = 0;
  62. rep(i,1,n)
  63. pre[i] = pre[i-1] + a[i-1];
  64. //f(i,n+1)
  65. // cout<<pre[i]<<" ";
  66. int q;
  67. cin>>q;
  68. while(q--)
  69. {
  70. int type;
  71. cin>>type;
  72. if(type==1)
  73. {
  74. int l,r;
  75. cin>>l>>r;
  76. if(add1.size()==0)
  77. {
  78. cout<<pre[r]-pre[l-1]<<endl;
  79. }
  80. else
  81. {
  82. vector<long long int> add;
  83. ll ans = 0ll;
  84. if(r>add1.size() && l<=add1.size())
  85. {
  86. add = add1;
  87. add.pb(0);
  88. reverse(add.begin(),add.end());
  89. rep(i,l,add.size())
  90. ans += add[i];
  91. int nr = r-add1.size();
  92. ans += pre[nr];
  93. }
  94. else if(l<=add1.size() && r<=add1.size())
  95. {
  96. add = add1;
  97. add.pb(0);
  98. reverse(add.begin(),add.end());
  99. rep(i,l,r)
  100. ans += add[i];
  101. }
  102. else if(l>add1.size())
  103. {
  104. l = l-add1.size();
  105. r = r-add1.size();
  106. ans += pre[r]-pre[l-1];
  107. }
  108. cout<<ans<<endl;
  109. }
  110. }
  111. else {
  112. ll u;
  113. cin>>u;
  114. add1.pb(u);
  115. }
  116. }
  117. return 0;
  118. }
Success #stdin #stdout 0s 4340KB
stdin
5
6 7 8 9 10
9
2 5
2 4
1 2 7
2 3
2 2
2 1
1 1 10
1 1 1
1 10 10
stdout
45
55
1
10