Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #pragma comment(linker, "/STACK:66777216")
- #include <iostream>
- #include <cstdio>
- #include <cmath>
- #include <vector>
- #include <ctime>
- #include <map>
- #include <set>
- #include <string>
- #include <queue>
- #include <deque>
- #include <cassert>
- #include <cstdlib>
- #include <bitset>
- #include <algorithm>
- #include <string>
- #include <list>
- #include <fstream>
- #include <cstring>
- #include <unordered_map>
- using namespace std;
- typedef unsigned long long ull;
- typedef long long ll;
- typedef long double ld;
- #define forn(i, n) for (int i = 0; i < (int)n; i++)
- #define fornn(i, q, n) for (int i = q; i < (ll)n; i++)
- #define mp make_pair
- #define pk push_back
- #define all(v) v.begin(), v.end()
- #define times clock() * 1.0 / CLOCKS_PER_SEC
- #define prev pprev
- #define TASK "elections"
- const double EPS = 1e-7;
- const double PI = acos(-1.0);
- const ll INF = (ll)2e9 + 1;
- const ll LINF = (ll)8e18;
- const ll MM = (ll)1e9 + 7;
- int solve();
- void gen();
- int main() {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout);
- #else
- //freopen(TASK".in", "r", stdin), freopen(TASK".out", "w", stdout);
- //freopen("input.txt", "r", stdin), freopen("output.txt", "w", stdout), freopen("test.txt", "w", stderr);
- #endif
- solve();
- return 0;
- }
- const int MAXN = 2e5 + 7;
- const int MAXC = 5e7;
- int n, k, a, b, q;
- ll T[4 * MAXN];
- ll TT[4 * MAXN];
- void update(int v, int tl, int tr, int pos, ll val) {
- if (tl == tr) {
- T[v] = val;
- }
- else {
- int tm = (tl + tr) / 2;
- if (tm >= pos) {
- update(v * 2, tl, tm, pos, val);
- }
- else
- update(v * 2 + 1, tm + 1, tr, pos, val);
- T[v] = T[v * 2] + T[v * 2 + 1];
- }
- }
- ll get(int v, int tl, int tr, int l, int r) {
- if (l == tl && r == tr) {
- return T[v];
- }
- else {
- int tm = (tl + tr) / 2;
- if (r <= tm){
- return get(v * 2, tl, tm, l, r);
- }
- else if (tm < l) {
- return get(v * 2 + 1, tm + 1, tr, l, r);
- }
- return (get(v * 2, tl, tm, l, tm) + get(v * 2 + 1, tm + 1, tr, tm + 1, r));
- }
- }
- void update2(int v, int tl, int tr, int pos, ll val) {
- if (tl == tr) {
- TT[v] = val;
- }
- else {
- int tm = (tl + tr) / 2;
- if (tm >= pos) {
- update2(v * 2, tl, tm, pos, val);
- }
- else
- update2(v * 2 + 1, tm + 1, tr, pos, val);
- TT[v] = TT[v * 2] + TT[v * 2 + 1];
- }
- }
- ll get2(int v, int tl, int tr, int l, int r) {
- if (l == tl && r == tr) {
- return TT[v];
- }
- else {
- int tm = (tl + tr) / 2;
- if (r <= tm) {
- return get2(v * 2, tl, tm, l, r);
- }
- else if (tm < l) {
- return get2(v * 2 + 1, tm + 1, tr, l, r);
- }
- return (get2(v * 2, tl, tm, l, tm) + get2(v * 2 + 1, tm + 1, tr, tm + 1, r));
- }
- }
- int solve() {
- cin >> n >> k >> a >> b >> q;
- while (q--) {
- int w;
- scanf("%d", &w);
- if (w == 1) {
- int d, q;
- scanf("%d%d", &d, &q);
- update(1, 0, n - 1, d - 1, get(1, 0, n - 1, d - 1, d - 1) + min(a, q));
- update2(1, 0, n - 1, d - 1, get2(1, 0, n - 1, d - 1, d - 1) + min(b, q));
- }
- else {
- int p;
- scanf("%d", &p);
- if (p == 1) {
- if (p + k - 1 >= n) {
- printf("0\n");
- }
- else {
- printf("%d\n", get(1, 0, n - 1, p + k - 1, n - 1));
- }
- }
- else {
- if (p + k - 1 >= n) {
- printf("%d\n", get2(1, 0, n - 1, 0, p - 2));
- }
- else {
- printf("%d\n", get2(1, 0, n - 1, 0, p - 2) + get(1, 0, n - 1, p + k - 1, n - 1));
- }
- }
- }
- }
- return 0;
- }
- [close]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement