Advertisement
Guest User

Untitled

a guest
Feb 28th, 2016
229
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #pragma comment(linker, "/STACK:66777216")
  3. #include <iostream>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <vector>
  7. #include <ctime>
  8. #include <map>
  9. #include <set>
  10. #include <string>
  11. #include <queue>
  12. #include <deque>
  13. #include <cassert>
  14. #include <cstdlib>
  15. #include <bitset>
  16. #include <algorithm>
  17. #include <string>
  18. #include <list>
  19. #include <fstream>
  20. #include <cstring>
  21. #include <unordered_map>
  22. using namespace std;
  23.  
  24. typedef unsigned long long ull;
  25. typedef long long ll;
  26. typedef long double ld;
  27.  
  28. #define forn(i, n) for (int i = 0; i < (int)n; i++)
  29. #define fornn(i, q, n) for (int i = q; i < (ll)n; i++)
  30. #define mp make_pair
  31. #define pk push_back
  32. #define all(v) v.begin(), v.end()
  33. #define times clock() * 1.0 / CLOCKS_PER_SEC
  34. #define prev pprev
  35.  
  36. #define TASK "elections"
  37.  
  38. const double EPS = 1e-7;
  39. const double PI = acos(-1.0);
  40.  
  41. const ll INF = (ll)2e9 + 1;
  42. const ll LINF = (ll)8e18;
  43. const ll MM = (ll)1e9 + 7;
  44.  
  45. int solve();
  46. void gen();
  47.  
  48. int main() {
  49. #ifdef _DEBUG
  50. freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
  51. #else
  52. //freopen(TASK".in", "r", stdin), freopen(TASK".out", "w", stdout);
  53. //freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout), freopen("test.txt", "w", stderr);
  54. #endif
  55. solve();
  56. return 0;
  57. }
  58.  
  59. const int MAXN = 2e5 + 7;
  60. const int MAXC = 5e7;
  61.  
  62. int n, k, a, b, q;
  63. ll T[4 * MAXN];
  64. ll TT[4 * MAXN];
  65.  
  66. void update(int v, int tl, int tr, int pos, ll val) {
  67. if (tl == tr) {
  68. T[v] = val;
  69. }
  70. else {
  71. int tm = (tl + tr) / 2;
  72. if (tm >= pos) {
  73. update(v * 2, tl, tm, pos, val);
  74. }
  75. else
  76. update(v * 2 + 1, tm + 1, tr, pos, val);
  77. T[v] = T[v * 2] + T[v * 2 + 1];
  78. }
  79. }
  80.  
  81. ll get(int v, int tl, int tr, int l, int r) {
  82. if (l == tl && r == tr) {
  83. return T[v];
  84. }
  85. else {
  86. int tm = (tl + tr) / 2;
  87. if (r <= tm){
  88. return get(v * 2, tl, tm, l, r);
  89. }
  90. else if (tm < l) {
  91. return get(v * 2 + 1, tm + 1, tr, l, r);
  92. }
  93. return (get(v * 2, tl, tm, l, tm) + get(v * 2 + 1, tm + 1, tr, tm + 1, r));
  94. }
  95. }
  96.  
  97. void update2(int v, int tl, int tr, int pos, ll val) {
  98. if (tl == tr) {
  99. TT[v] = val;
  100. }
  101. else {
  102. int tm = (tl + tr) / 2;
  103. if (tm >= pos) {
  104. update2(v * 2, tl, tm, pos, val);
  105. }
  106. else
  107. update2(v * 2 + 1, tm + 1, tr, pos, val);
  108. TT[v] = TT[v * 2] + TT[v * 2 + 1];
  109. }
  110. }
  111.  
  112. ll get2(int v, int tl, int tr, int l, int r) {
  113. if (l == tl && r == tr) {
  114. return TT[v];
  115. }
  116. else {
  117. int tm = (tl + tr) / 2;
  118. if (r <= tm) {
  119. return get2(v * 2, tl, tm, l, r);
  120. }
  121. else if (tm < l) {
  122. return get2(v * 2 + 1, tm + 1, tr, l, r);
  123. }
  124. return (get2(v * 2, tl, tm, l, tm) + get2(v * 2 + 1, tm + 1, tr, tm + 1, r));
  125. }
  126. }
  127.  
  128.  
  129. int solve() {
  130. cin >> n >> k >> a >> b >> q;
  131. while (q--) {
  132. int w;
  133. scanf("%d", &w);
  134. if (w == 1) {
  135. int d, q;
  136. scanf("%d%d", &d, &q);
  137. update(1, 0, n - 1, d - 1, get(1, 0, n - 1, d - 1, d - 1) + min(a, q));
  138. update2(1, 0, n - 1, d - 1, get2(1, 0, n - 1, d - 1, d - 1) + min(b, q));
  139. }
  140. else {
  141. int p;
  142. scanf("%d", &p);
  143. if (p == 1) {
  144. if (p + k - 1 >= n) {
  145. printf("0\n");
  146. }
  147. else {
  148. printf("%d\n", get(1, 0, n - 1, p + k - 1, n - 1));
  149. }
  150. }
  151. else {
  152. if (p + k - 1 >= n) {
  153. printf("%d\n", get2(1, 0, n - 1, 0, p - 2));
  154. }
  155. else {
  156. printf("%d\n", get2(1, 0, n - 1, 0, p - 2) + get(1, 0, n - 1, p + k - 1, n - 1));
  157. }
  158. }
  159. }
  160. }
  161. return 0;
  162. }
  163.  
  164. [close]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement