fork download
  1. #include <bits/stdc++.h>
  2. #define FOR(i, a, b) for(int i = (a); i <= (b); i++)
  3. #define FOD(i, a, b) for(int i = (a); i >= (b); i--)
  4. #define file(name) if(fopen(name".inp", "r")) { freopen(name".inp", "r", stdin); freopen(name".out", "w", stdout); }
  5. #define el cout << '\n'
  6. #define maxn int(3e5 + 5)
  7.  
  8. using namespace std;
  9.  
  10. typedef long long ll;
  11.  
  12. int n, q, T, a[maxn];
  13.  
  14. ll pre[2][maxn];
  15.  
  16. ll get(int l, int r, int id) {
  17. return pre[id][r] - pre[id][l - 1];
  18. }
  19.  
  20. int main() {
  21. ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  22. file("rating");
  23. cin >> T;
  24. cin >> n >> q;
  25. FOR(i, 1, n) cin >> a[i];
  26. FOR(i, 1, n) {
  27. pre[0][i] = pre[0][i - 1] + (i & 1 ? -a[i] : a[i]);
  28. pre[1][i] = pre[1][i - 1] + a[i];
  29. }
  30. while(q--) {
  31. int L, R, x;
  32. cin >> x >> L >> R;
  33. if(x < 0) x = abs(x - a[L++]);
  34. int l = L, r = R, pos = L - 1;
  35. while(l <= r) {
  36. int mid = (l + r) >> 1;
  37. if(get(L, mid, 1) <= x) pos = mid, l = mid + 1;
  38. else r = mid - 1;
  39. }
  40. x -= get(L, pos, 1);
  41. ll sum = 0;
  42. if((R - pos) & 1) {
  43. sum = get(pos + 1, R, 0);
  44. if((pos + 1) & 1) sum = -sum;
  45. sum -= x;
  46. } else {
  47. sum = -get(pos + 1, R, 0);
  48. if((pos + 1) & 1) sum = -sum;
  49. sum += x;
  50. }
  51. cout << sum, el;
  52. }
  53. return 0;
  54. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty