답안 #803718

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
803718 2023-08-03T05:39:04 Z 이동현(#10103) Vera and Modern Art (CCO17_art) C++17
5 / 25
4000 ms 7760 KB
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
using namespace std;

struct Data{
    long long x, y;
    int sum;
    Data(long long x, long long y, int sum):x(x), y(y), sum(sum){}
    bool operator<(const Data&r)const{
        return x < r.x || (x == r.x && y < r.y);
    }
};
vector<Data> srt[70][70];

signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    auto len = [&](long long x){
        return 64 - __builtin_clzll(x);
    };

    mt19937 gen(23523);
    uniform_int_distribution<long long> uid(1, (long long)1e18);

    int n, q;
    cin >> n >> q;
    // n = q = 200000;
    for(int i = 0; i < n; ++i){
        long long x, y;
        int v;
        cin >> x >> y >> v;
        // x = uid(gen), y = uid(gen), v = uid(gen);
        srt[len(x) - 1][len(y) - 1].push_back({x, y, v});
    }

    for(int i = 0; i < 70; ++i){
        for(int j = 0; j < 70; ++j){
            sort(srt[i][j].begin(), srt[i][j].end());
            for(int k = 1; k < (int)srt[i][j].size(); ++k){
                srt[i][j][k].sum += srt[i][j][k - 1].sum;
            }
        }
    }

    for(int rep = 0; rep < q; ++rep){
        long long x, y;
        cin >> x >> y;
        int ans = 0;
        for(int i = 0; (1ll << i) <= x; ++i){
            for(int j = 0; (1ll << j) <= y; ++j){
                if(!(int)srt[i][j].size()) continue;
                long long px = x % (1ll << i) + (1ll << i);
                long long py = y % (1ll << j) + (1ll << j);

                int p1 = lower_bound(srt[i][j].begin(), srt[i][j].end(), Data(px, py, -1)) - srt[i][j].begin();
                int p2 = lower_bound(srt[i][j].begin(), srt[i][j].end(), Data(px, py + 1, -1)) - srt[i][j].begin() - 1;
                if(p1 <= p2){
                    ans += srt[i][j][p2].sum;
                    if(p1) ans -= srt[i][j][p1 - 1].sum;
                }
            }
        }

        cout << ans << '\n';
    }
    
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 15 ms 468 KB Output is correct
3 Correct 22 ms 468 KB Output is correct
4 Correct 109 ms 504 KB Output is correct
5 Correct 104 ms 488 KB Output is correct
6 Correct 28 ms 468 KB Output is correct
7 Correct 27 ms 500 KB Output is correct
8 Correct 27 ms 500 KB Output is correct
9 Correct 31 ms 492 KB Output is correct
10 Correct 27 ms 504 KB Output is correct
11 Correct 27 ms 496 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1404 ms 6248 KB Output is correct
2 Correct 1763 ms 6240 KB Output is correct
3 Execution timed out 4081 ms 7760 KB Time limit exceeded
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Correct 300 ms 3660 KB Output is correct
3 Correct 305 ms 3636 KB Output is correct
4 Execution timed out 4034 ms 4072 KB Time limit exceeded
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 340 KB Output is correct
2 Correct 15 ms 468 KB Output is correct
3 Correct 22 ms 468 KB Output is correct
4 Correct 109 ms 504 KB Output is correct
5 Correct 104 ms 488 KB Output is correct
6 Correct 28 ms 468 KB Output is correct
7 Correct 27 ms 500 KB Output is correct
8 Correct 27 ms 500 KB Output is correct
9 Correct 31 ms 492 KB Output is correct
10 Correct 27 ms 504 KB Output is correct
11 Correct 27 ms 496 KB Output is correct
12 Correct 1404 ms 6248 KB Output is correct
13 Correct 1763 ms 6240 KB Output is correct
14 Execution timed out 4081 ms 7760 KB Time limit exceeded
15 Halted 0 ms 0 KB -