A21555 LYZ滑冰 全站首杀AK
2025-07-15 20:53:39
发布于:湖北
32阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <algorithm>
using ll = long long;
const int MAXN = 200005;
ll max_val[4 * MAXN];
ll lazy[4 * MAXN];
ll n, m, k, d;
void push_up(int u) {
    max_val[u] = std::max(max_val[u * 2], max_val[u * 2 + 1]);
}
void push_down(int u) {
    if (lazy[u] != 0) {
        max_val[u * 2] += lazy[u];
        lazy[u * 2] += lazy[u];
        max_val[u * 2 + 1] += lazy[u];
        lazy[u * 2 + 1] += lazy[u];
        lazy[u] = 0;
    }
}
void build(int u, int l, int r) {
    lazy[u] = 0;
    if (l == r) {
        max_val[u] = -1LL * (l + d) * k;
        return;
    }
    int mid = l + (r - l) / 2;
    build(u * 2, l, mid);
    build(u * 2 + 1, mid + 1, r);
    push_up(u);
}
void update(int u, int l, int r, int update_l, int update_r, ll val) {
    if (update_l > update_r) {
        return;
    }
    if (update_l <= l && r <= update_r) {
        max_val[u] += val;
        lazy[u] += val;
        return;
    }
    push_down(u);
    int mid = l + (r - l) / 2;
    if (update_l <= mid) {
        update(u * 2, l, mid, update_l, update_r, val);
    }
    if (update_r > mid) {
        update(u * 2 + 1, mid + 1, r, update_l, update_r, val);
    }
    push_up(u);
}
ll query(int u, int l, int r, int query_l, int query_r) {
    if (query_l > query_r) {
        return -2e18; 
    }
    if (query_l <= l && r <= query_r) {
        return max_val[u];
    }
    push_down(u);
    int mid = l + (r - l) / 2;
    ll res = -2e18;
    if (query_l <= mid) {
        res = std::max(res, query(u * 2, l, mid, query_l, query_r));
    }
    if (query_r > mid) {
        res = std::max(res, query(u * 2 + 1, mid + 1, r, query_l, query_r));
    }
    return res;
}
void solve() {
    std::cin >> n >> m >> k >> d;
    build(1, 1, n);
    for (int i = 0; i < m; ++i) {
        ll r, x;
        std::cin >> r >> x;
        
        update(1, 1, n, r, n, x);
        
        ll max_b = 0;
        if (n - d >= 1) {
            max_b = query(1, 1, n, 1, n - d);
        }
        if (max_b <= 0) {
            std::cout << "TAK\n";
        } else {
            std::cout << "NIE\n";
        }
    }
}
int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);
    solve();
    return 0;
}
这里空空如也





有帮助,赞一个