제출 #1073351

#제출 시각아이디문제언어결과실행 시간메모리
1073351SzilExamination (JOI19_examination)C++17
100 / 100
1372 ms123916 KiB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>

using ll = long long;
using namespace std;
using namespace __gnu_pbds;
using indexed_set = tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>;

const int MAXN = 100'001;

indexed_set t[4*MAXN];
int val[MAXN], ans[MAXN], n, q;

void sequpd(int u, int k) {
    u += n;
    for (;u >= 1; u /= 2) {
        t[u].insert(k);
    }
}

int segqry(int l, int r, int k) {
    int res = 0;
    l += n; r += n;
    while (l <= r) {
        if (l % 2 == 1) {
            res += t[l].size() - t[l].order_of_key(k);
            l++;
        }
        if (r % 2 == 0) {
            res += t[r].size() - t[r].order_of_key(k);
            r--;
        }
        l /= 2; r /= 2;
    }
    return res;
}

void solve() {
    cin >> n >> q;
    vector<array<int, 3>> v(n);
    for (int i = 0; i < n; i++) {
        cin >> v[i][0] >> v[i][1];
        v[i][2] = -1;
    }
    sort(v.begin(), v.end(), [](auto a, auto b){
        return a[1] < b[1];
    });
    for (int i = 0; i < n; i++) {
        v[i][2] = i+1;
        val[i+1] = v[i][1];
    }
    sort(v.begin(), v.end(), [](auto a, auto b){
        return a[0] > b[0];
    });
    vector<array<int, 4>> qrys(q);
    for (int i = 0; i < q; i++) {
        cin >> qrys[i][0] >> qrys[i][1] >> qrys[i][2];
        qrys[i][3] = i;
    }
    sort(qrys.begin(), qrys.end(), [](auto a, auto b){
        return a[0] > b[0];
    });
    int idx = 0;
    for (auto [x, y, z, i] : qrys) {
        while (idx < n && v[idx][0] >= x) {
            sequpd(v[idx][2], v[idx][0] + v[idx][1]);
            idx++;
        }
        int pos = lower_bound(val+1, val+n+1, y) - val;
        ans[i] = segqry(pos, n, z);
    }

    for (int i = 0; i < q; i++) {
        cout << ans[i] << "\n";
    }
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...