답안 #1106890

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1106890 2024-10-31T08:46:12 Z Yang8on Regions (IOI09_regions) C++17
36 / 100
3264 ms 109896 KB
#include <bits/stdc++.h>
#define Y8o "REGIONS"
#define maxn (int) 2e5 + 5
#define ll long long
#define pii pair<int, int>
#define gb(i, j) ((i >> j) & 1)
#define all(x) x.begin(), x.end()
#define _left id * 2, l, mid
#define _right id * 2 + 1, mid + 1, r
#define fi(i, a, b) for(int i = a; i <= b; i ++)
#define fid(i, a, b) for(int i = a; i >= b; i --)

//#define f first
//#define s second

using namespace std;

mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
ll GetRandom(ll l, ll r) {
    return uniform_int_distribution<ll> (l, r) (rng);
}
void iof() {
    ios_base::sync_with_stdio(0);
    cin.tie(NULL), cout.tie(NULL);
    if(fopen(Y8o".inp", "r"))
    {
        freopen(Y8o".inp", "r", stdin);
//        freopen(Y8o".out", "w", stdout);
    }
}
void ctime() {
    cerr << "\n" << "\nTime elapsed: " << 1000 * clock() / CLOCKS_PER_SEC << "ms\n";
}

const int can = 450;

int n, m, Q, cnt;
int a[maxn];
int in[maxn], out[maxn], vir[maxn], dem[maxn];
vector<pii> cur, qq[maxn];
vector<int> o[maxn], pos[maxn];
vector<int> ans_dw[maxn], ans_up[maxn];

void pre_dfs(int u = 1) {
    in[u] = ++cnt;
    for(int v : o[u]) pre_dfs(v);
    out[u] = cnt;
    qq[a[u]].push_back({ in[u], out[u] });
}

void dfs(int u, int cl, int d) {
    ans_dw[cl][a[u]] += d;
    d += (dem[u] = (a[u] == cl));
    for(int v : o[u]) {
        dfs(v, cl, d);
        dem[u] += dem[v];
    }
    ans_up[cl][a[u]] += dem[u];
}

void solve() {
    cin >> n >> m >> Q;
    fi(i, 1, n) {
        if(i > 1) {
            int u; cin >> u;
            o[u].push_back(i);
        }
        cin >> a[i], pos[a[i]].push_back(i);
    }

    pre_dfs();

    cnt = 0;
    fi(i, 1, m) {
        if(pos[i].size() > can) {
            ans_up[i].assign(m + 1, 0);
            ans_dw[i].assign(m + 1, 0);
            dfs(1, i, 0);
        }
        sort( all(pos[i]), [&](int x, int y) { return in[x] < in[y]; });
    }

    fi(_, 1, Q) {
        int u, v; cin >> u >> v;
        if(pos[u].size() > can) cout << ans_dw[u][v] << endl;
        else if(pos[v].size() > can) cout << ans_up[v][u] << endl;
        else {
            cur.clear();
            fi(i, 0, pos[u].size() - 1) {
                int node = pos[u][i];
                cur.push_back({ in[node], +1 }), cur.push_back({ out[node] + 1, -1 });
            }
            sort(all(cur));

            int j = 0, op = 0; ll res = 0;
            fi(i, 0, pos[v].size() - 1) {
                int node = pos[v][i];
                while(j < cur.size() && cur[j].first <= in[node]) op += cur[j ++].second;
                res += op;
            }
            cout << res << endl;

//            int total=0,j=0;
//            vector<pii> cc;
//            for(auto [l,r]:qq[u]){
//                while(j<(int)pos[v].size() && in[pos[v][j]]<=r) cc.push_back({pos[v][j++],1});
//                while((int)cc.size()>=2 && in[cc.end()[-2].first]>=l){
//                    int u=cc.back().second;cc.pop_back();
//                    cc.back().second+=u;
//                }
//                if(!cc.empty() && in[cc.back().first]>=l) total+=cc.back().second;
//            }
//            cout << total << endl;
        }
    }
}


signed main() {
    iof();

    int nTest = 1;
//    cin >> nTest;

    while(nTest --) {
        solve();
    }

//    ctime();
    return 0;
}

Compilation message

regions.cpp: In function 'void solve()':
regions.cpp:10:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 | #define fi(i, a, b) for(int i = a; i <= b; i ++)
......
   89 |             fi(i, 0, pos[u].size() - 1) {
      |                ~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:89:13: note: in expansion of macro 'fi'
   89 |             fi(i, 0, pos[u].size() - 1) {
      |             ^~
regions.cpp:10:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   10 | #define fi(i, a, b) for(int i = a; i <= b; i ++)
......
   96 |             fi(i, 0, pos[v].size() - 1) {
      |                ~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:96:13: note: in expansion of macro 'fi'
   96 |             fi(i, 0, pos[v].size() - 1) {
      |             ^~
regions.cpp:98:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |                 while(j < cur.size() && cur[j].first <= in[node]) op += cur[j ++].second;
      |                       ~~^~~~~~~~~~~~
regions.cpp: In function 'void iof()':
regions.cpp:27:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   27 |         freopen(Y8o".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Runtime error 39 ms 54860 KB Execution killed with signal 11
2 Runtime error 43 ms 54980 KB Execution killed with signal 11
3 Runtime error 40 ms 54876 KB Execution killed with signal 11
4 Correct 7 ms 27228 KB Output is correct
5 Correct 11 ms 27088 KB Output is correct
6 Runtime error 37 ms 55120 KB Execution killed with signal 11
7 Correct 20 ms 27216 KB Output is correct
8 Correct 29 ms 27216 KB Output is correct
9 Correct 41 ms 27728 KB Output is correct
10 Correct 73 ms 27728 KB Output is correct
11 Correct 117 ms 27984 KB Output is correct
12 Correct 137 ms 28496 KB Output is correct
13 Correct 154 ms 28240 KB Output is correct
14 Correct 257 ms 28824 KB Output is correct
15 Correct 329 ms 31924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1236 ms 32008 KB Output is correct
2 Correct 1284 ms 30688 KB Output is correct
3 Correct 2620 ms 34396 KB Output is correct
4 Runtime error 49 ms 58164 KB Execution killed with signal 11
5 Runtime error 60 ms 62024 KB Execution killed with signal 11
6 Runtime error 139 ms 67080 KB Execution killed with signal 11
7 Runtime error 282 ms 64584 KB Execution killed with signal 11
8 Runtime error 727 ms 92256 KB Execution killed with signal 11
9 Runtime error 111 ms 73800 KB Execution killed with signal 11
10 Runtime error 260 ms 108600 KB Execution killed with signal 11
11 Runtime error 102 ms 72264 KB Execution killed with signal 11
12 Runtime error 165 ms 75604 KB Execution killed with signal 11
13 Runtime error 116 ms 77168 KB Execution killed with signal 11
14 Runtime error 255 ms 82388 KB Execution killed with signal 11
15 Correct 3264 ms 43868 KB Output is correct
16 Correct 3048 ms 52892 KB Output is correct
17 Runtime error 202 ms 109896 KB Execution killed with signal 11