# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
299387 | 2020-09-14T20:05:55 Z | mat_v | Regions (IOI09_regions) | C++14 | 4879 ms | 128880 KB |
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> #define ff(i,a,b) for(int (i) = (a); (i) <= (b); ++(i)) #define fb(i,a,b) for(int (i) = (a); (i) >= (b); --(i)) #define mod 998244353 #define xx first #define yy second #define all(a) (a).begin(), (a).end() #define pb push_back #define ll long long #define pii pair<int,int> #define maxn 200005 using namespace std; using namespace __gnu_pbds; typedef tree<int, null_type, less<int>,rb_tree_tag, tree_order_statistics_node_update> ordered_set;/// find_by_order(x)(x+1th) , order_of_key() (strictly less) mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); int dlt = 500; int t = 0; int n,r,q; vector<int> graf[maxn]; int cnt[maxn]; int cale[maxn], niz[maxn]; int slika[maxn]; int rev[maxn]; int atm[maxn]; int in[maxn], out[maxn]; int dole[25010][505]; int gore[25010][505]; vector<pii> all[25005]; vector<int> ins[25005]; int br; void dfs(int x){ in[x] = ++t; atm[niz[x]]++; if(rev[niz[x]]){ ff(i,1,r){ dole[i][rev[niz[x]]] += atm[i]; } dole[niz[x]][rev[niz[x]]]--; gore[niz[x]][rev[niz[x]]]--; } ff(i,1,br){ gore[niz[x]][i] += atm[rev[i]]; } for(auto c:graf[x]){ if(c == cale[x])continue; dfs(c); } atm[niz[x]]--; out[x] = t; if(!rev[niz[x]]){ all[niz[x]].pb({in[x], -1}); all[niz[x]].pb({out[x], 1}); ins[niz[x]].pb(in[x]); } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> r >> q; ff(i,1,n){ if(i == 1){ cin >> niz[i]; continue; } cin >> cale[i] >> niz[i]; graf[i].pb(cale[i]); graf[cale[i]].pb(i); cnt[niz[i]]++; } ff(i,1,r){ if(cnt[i] >= dlt){ slika[i] = ++br; rev[br] = i; } } dfs(1); ff(i,1,r){ sort(all[i].begin(), all[i].end()); sort(ins[i].begin(), ins[i].end()); } while(q--){ int r1,r2; cin >> r1 >> r2; if(rev[r1]){ cout << dole[r2][rev[r1]] << endl; continue; } if(rev[r2]){ cout << gore[r1][rev[r2]] << endl; continue; } int ans = 0; for(int i=0, j=0; i<all[r1].size();i++){ while(j<ins[r2].size() && ins[r2][j] <= all[r1][i].xx)j++; ans += j*all[r1][i].yy; } cout << (ans) - (r1 == r2) * (ins[r1].size()) << endl; } return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 6272 KB | Output is correct |
2 | Correct | 5 ms | 6272 KB | Output is correct |
3 | Correct | 7 ms | 6272 KB | Output is correct |
4 | Correct | 9 ms | 6272 KB | Output is correct |
5 | Correct | 12 ms | 6272 KB | Output is correct |
6 | Correct | 15 ms | 6400 KB | Output is correct |
7 | Correct | 33 ms | 6400 KB | Output is correct |
8 | Correct | 38 ms | 6400 KB | Output is correct |
9 | Correct | 33 ms | 7032 KB | Output is correct |
10 | Correct | 74 ms | 7112 KB | Output is correct |
11 | Correct | 82 ms | 7500 KB | Output is correct |
12 | Correct | 133 ms | 8136 KB | Output is correct |
13 | Correct | 157 ms | 8444 KB | Output is correct |
14 | Correct | 204 ms | 8888 KB | Output is correct |
15 | Correct | 211 ms | 11392 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 2772 ms | 13212 KB | Output isn't correct |
2 | Incorrect | 4654 ms | 13324 KB | Output isn't correct |
3 | Incorrect | 4558 ms | 15484 KB | Output isn't correct |
4 | Correct | 154 ms | 8892 KB | Output is correct |
5 | Correct | 336 ms | 10240 KB | Output is correct |
6 | Incorrect | 751 ms | 38028 KB | Output isn't correct |
7 | Correct | 954 ms | 12280 KB | Output is correct |
8 | Incorrect | 992 ms | 56696 KB | Output isn't correct |
9 | Correct | 1278 ms | 19904 KB | Output is correct |
10 | Correct | 2128 ms | 23672 KB | Output is correct |
11 | Correct | 2397 ms | 22808 KB | Output is correct |
12 | Incorrect | 2387 ms | 83476 KB | Output isn't correct |
13 | Incorrect | 2914 ms | 84556 KB | Output isn't correct |
14 | Incorrect | 3430 ms | 100328 KB | Output isn't correct |
15 | Incorrect | 4140 ms | 124144 KB | Output isn't correct |
16 | Incorrect | 4750 ms | 128880 KB | Output isn't correct |
17 | Incorrect | 4879 ms | 107988 KB | Output isn't correct |