답안 #330887

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
330887 2020-11-26T20:10:20 Z 12tqian Examination (JOI19_examination) C++17
43 / 100
2130 ms 277916 KB
#include<bits/stdc++.h>
using namespace std;
const int SZ = (1 << 17);
template<class T> struct Node {
    T val = 0; 
    Node<T>* c[2];
    Node() { c[0] = c[1] = NULL; }
    void upd(int ind, T v, int L = 0, int R = SZ - 1) { // add v
        if (L == ind && R == ind) { val += v; return; }
        int M = (L + R) / 2;
        if (ind <= M) {
            if (!c[0]) c[0] = new Node();
            c[0]->upd(ind, v, L, M);
        } else {
            if (!c[1]) c[1] = new Node();
            c[1]->upd(ind, v, M + 1, R);
        }
        val = 0; 
        for (int i = 0; i < 2; i++)
            if (c[i]) val += c[i]->val;
    }
    T query(int lo, int hi, int L = 0, int R = SZ - 1) { // query sum of segment
        if (hi < L || R < lo) return 0;
        if (lo <= L && R <= hi) return val;
        int M = (L + R) / 2; 
        T res = 0;
        if (c[0]) res += c[0]->query(lo, hi, L, M);
        if (c[1]) res += c[1]->query(lo, hi, M + 1, R);
        return res;
    }
    void update_2d(int ind, Node* c0, Node* c1, int L = 0, int R = SZ - 1) { // for 2D segtree
        if (L != R) {
            int M = (L + R) / 2;
            if (ind <= M) {
                if (!c[0]) c[0] = new Node();
                c[0]->update_2d(ind, (c0 ? c0->c[0] : NULL), (c1 ? c1->c[0] : NULL), L, M);
            } else {
                if (!c[1]) c[1] = new Node();
                c[1]->update_2d(ind, (c0 ? c0->c[1] : NULL), (c1 ? c1->c[1] : NULL), M + 1, R);
            }
        } 
        val = (c0 ? c0->val : 0) + (c1 ? c1->val : 0);
    }
};
template<class T> struct BITSeg {
    std::vector<Node<T>> seg;
    BITSeg() { 
        seg.resize(SZ);
        for (int i = 0; i < SZ; i++)
            seg[i] = Node<T>();
    }
    void upd(int x, int y, int v) { // add v
        x++;
        for (; x < SZ; x += x & -x) 
            seg[x].upd(y, v); 
    }
    T query(int x, int y1, int y2) {
        if (x <= 0) return 0;
        T res = 0; 
        for (; x; x -= x & -x) 
            res += seg[x].query(y1, y2);
        return res; 
    }
    T query(int x1, int x2, int y1, int y2) { // query sum of rectangle
        x1++, x2++;
        return query(x2, y1, y2) - query(x1 - 1, y1, y2); 
    }
};

int main() {
    // ios_base::sync_with_stdio(0);
    // cin.tie(0);
    int n, q; cin >> n >> q;
    vector<array<int, 2>> v(n);
    set<int> xs, ys;
    for (int i = 0; i < n; i++) {
        cin >> v[i][0] >> v[i][1];
        xs.insert(v[i][0]);
        ys.insert(v[i][1]);
    }
    vector<int> ans(q);
    vector<array<int, 4>> queries(q);
    for (int i = 0; i < q; i++) {
        queries[i][0] = i;
        cin >> queries[i][1] >> queries[i][2] >> queries[i][3];
        xs.insert(queries[i][1]);
        ys.insert(queries[i][2]);
    }
    map<int, int> mx, my;
    int cnt = 0;
    for (int x : xs) 
        mx[x] = cnt, cnt++;
    cnt = 0;
    for (int y : ys)
        my[y] = cnt, cnt++;
    sort(queries.begin(), queries.end(), [](array<int, 4> a, array<int, 4> b) {
        return a[3] < b[3];
    });
    sort(v.begin(), v.end(), [](array<int, 2> a, array<int, 2> b) {
        return a[0] + a[1] < b[0] + b[1];
    });
    BITSeg<int> seg;
    int qv = n;
    for (int i = q - 1; i >= 0; i--) {
        int sum = queries[i][3];
        while (qv > 0 && v[qv - 1][0] + v[qv - 1][1] >= sum) {
            qv--;
            seg.upd(mx[v[qv][0]], my[v[qv][1]], 1);
        }
        ans[queries[i][0]] = seg.query(mx[queries[i][1]], SZ - 2, my[queries[i][2]], SZ - 2);
    }
    for (int i = 0; i < q; i++) 
        cout << ans[i] << '\n';
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3436 KB Output is correct
2 Correct 3 ms 3436 KB Output is correct
3 Correct 3 ms 3436 KB Output is correct
4 Correct 3 ms 3456 KB Output is correct
5 Correct 3 ms 3436 KB Output is correct
6 Correct 3 ms 3436 KB Output is correct
7 Correct 37 ms 11628 KB Output is correct
8 Correct 37 ms 11628 KB Output is correct
9 Correct 37 ms 11592 KB Output is correct
10 Correct 21 ms 6636 KB Output is correct
11 Correct 26 ms 8428 KB Output is correct
12 Correct 12 ms 3564 KB Output is correct
13 Correct 38 ms 11628 KB Output is correct
14 Correct 38 ms 11628 KB Output is correct
15 Correct 38 ms 11628 KB Output is correct
16 Correct 24 ms 8428 KB Output is correct
17 Correct 19 ms 6252 KB Output is correct
18 Correct 10 ms 3564 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2069 ms 275308 KB Output is correct
2 Correct 2091 ms 277484 KB Output is correct
3 Correct 2073 ms 277112 KB Output is correct
4 Correct 753 ms 66668 KB Output is correct
5 Correct 746 ms 99308 KB Output is correct
6 Correct 313 ms 7812 KB Output is correct
7 Correct 1733 ms 265068 KB Output is correct
8 Correct 1941 ms 265496 KB Output is correct
9 Correct 1458 ms 254320 KB Output is correct
10 Correct 684 ms 94444 KB Output is correct
11 Correct 591 ms 55404 KB Output is correct
12 Correct 269 ms 7404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2069 ms 275308 KB Output is correct
2 Correct 2091 ms 277484 KB Output is correct
3 Correct 2073 ms 277112 KB Output is correct
4 Correct 753 ms 66668 KB Output is correct
5 Correct 746 ms 99308 KB Output is correct
6 Correct 313 ms 7812 KB Output is correct
7 Correct 1733 ms 265068 KB Output is correct
8 Correct 1941 ms 265496 KB Output is correct
9 Correct 1458 ms 254320 KB Output is correct
10 Correct 684 ms 94444 KB Output is correct
11 Correct 591 ms 55404 KB Output is correct
12 Correct 269 ms 7404 KB Output is correct
13 Correct 1891 ms 277552 KB Output is correct
14 Correct 2130 ms 277916 KB Output is correct
15 Correct 2105 ms 277228 KB Output is correct
16 Correct 676 ms 66964 KB Output is correct
17 Correct 735 ms 99892 KB Output is correct
18 Correct 299 ms 7788 KB Output is correct
19 Correct 1908 ms 277864 KB Output is correct
20 Correct 2003 ms 277792 KB Output is correct
21 Correct 1653 ms 269804 KB Output is correct
22 Correct 676 ms 94572 KB Output is correct
23 Correct 571 ms 55660 KB Output is correct
24 Correct 275 ms 7404 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 3436 KB Output is correct
2 Correct 3 ms 3436 KB Output is correct
3 Correct 3 ms 3436 KB Output is correct
4 Correct 3 ms 3456 KB Output is correct
5 Correct 3 ms 3436 KB Output is correct
6 Correct 3 ms 3436 KB Output is correct
7 Correct 37 ms 11628 KB Output is correct
8 Correct 37 ms 11628 KB Output is correct
9 Correct 37 ms 11592 KB Output is correct
10 Correct 21 ms 6636 KB Output is correct
11 Correct 26 ms 8428 KB Output is correct
12 Correct 12 ms 3564 KB Output is correct
13 Correct 38 ms 11628 KB Output is correct
14 Correct 38 ms 11628 KB Output is correct
15 Correct 38 ms 11628 KB Output is correct
16 Correct 24 ms 8428 KB Output is correct
17 Correct 19 ms 6252 KB Output is correct
18 Correct 10 ms 3564 KB Output is correct
19 Correct 2069 ms 275308 KB Output is correct
20 Correct 2091 ms 277484 KB Output is correct
21 Correct 2073 ms 277112 KB Output is correct
22 Correct 753 ms 66668 KB Output is correct
23 Correct 746 ms 99308 KB Output is correct
24 Correct 313 ms 7812 KB Output is correct
25 Correct 1733 ms 265068 KB Output is correct
26 Correct 1941 ms 265496 KB Output is correct
27 Correct 1458 ms 254320 KB Output is correct
28 Correct 684 ms 94444 KB Output is correct
29 Correct 591 ms 55404 KB Output is correct
30 Correct 269 ms 7404 KB Output is correct
31 Correct 1891 ms 277552 KB Output is correct
32 Correct 2130 ms 277916 KB Output is correct
33 Correct 2105 ms 277228 KB Output is correct
34 Correct 676 ms 66964 KB Output is correct
35 Correct 735 ms 99892 KB Output is correct
36 Correct 299 ms 7788 KB Output is correct
37 Correct 1908 ms 277864 KB Output is correct
38 Correct 2003 ms 277792 KB Output is correct
39 Correct 1653 ms 269804 KB Output is correct
40 Correct 676 ms 94572 KB Output is correct
41 Correct 571 ms 55660 KB Output is correct
42 Correct 275 ms 7404 KB Output is correct
43 Runtime error 693 ms 93292 KB Execution killed with signal 7 (could be triggered by violating memory limits)
44 Halted 0 ms 0 KB -