Submission #1199454

#TimeUsernameProblemLanguageResultExecution timeMemory
1199454GoBananas69Examination (JOI19_examination)C++20
0 / 100
156 ms10308 KiB
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

struct Query {
    int type, s, t, sum, idx;
};

vector<int> tree;

void update(int i, int L, int R, int p) {
    if (L == R) {
        tree[i]++;
        return;
    }
    int m = (L + R) / 2;
    int x = 2 * i + 1, y = x + 1;
    if (p <= m) {
        update(x, L, m, p);
    } else {
        update(y, m + 1, R, p);
    }
    tree[i] = tree[x] + tree[y];
}

int query(int i, int L, int R, int l, int r) {
    if (L == l && r == R) {
        return tree[i];
    }
    int m = (L + R) / 2;
    int x = 2 * i + 1, y = x + 1;
    if (r <= m) {
        return query(x, L, m, l, r);
    } else if (l > m) {
        return query(y, m + 1, R, l, r);
    } else {
        return query(x, L, m, l, m) + query(y, m + 1, R, m + 1, r);
    }
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<Query> q(n + k);
    for (int i = 0; i<n; ++i) {
        int s, t;
        cin >> s >> t;
        q[i] = {0, s, t, s + t, -1};
    }
    for (int i = n; i<n + k; ++i) {
        int s, t, sum;
        cin >> s >> t >> sum;
        q[i] = {1, s, t, sum, i - n};
    }
    sort(q.begin(), q.end(), [](const Query &a, const Query &b) {
        return a.s < b.s;
    });
    int sz = 0;
    for (Query &i: q) {
        cout << i.type << ' ' << i.s << ' ' << i.t << ' ' << i.sum << '\n';
        sz = max(sz, i.t);
    }
    sz++;
    tree.resize(4 * sz, 0);
    vector<int> res(k);
    for (Query &i: q) {
        if (i.type == 0) {  
            update(0, 0, sz - 1, i.t);
        } else {
            res[i.idx] = query(0, 0, sz - 1, i.t, sz - 1);
        }
    }
    for (int &i: res) {
        cout << i << ' ';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...