Submission #1140251

#TimeUsernameProblemLanguageResultExecution timeMemory
1140251raphaelpRegions (IOI09_regions)C++20
55 / 100
8051 ms32036 KiB
#include <bits/stdc++.h> using namespace std; #define LSOne(S) ((S) & (-S)) class Fenwick { private: vector<int> ft; public: Fenwick(int x) { ft.assign(x + 1, 0); } int PQ(int x) { x++; int sum = 0; for (; x < ft.size(); x += LSOne(x)) sum += ft[x]; return sum; } void update(int a, int b, int val) { for (; a; a -= LSOne(a)) ft[a] -= val; for (; b; b -= LSOne(b)) ft[b] += val; } }; void dfs(int x, vector<vector<int>> &AR, vector<int> &deb, vector<int> &fin, int &cur) { deb[x] = cur++; for (auto fils : AR[x]) { dfs(fils, AR, deb, fin, cur); } fin[x] = cur; } int main() { int N, R, Q; cin >> N >> R >> Q; vector<int> p(N), reg(N); vector<vector<int>> AR(N), Habs(R); for (int i = 0; i < N; i++) { if (i > 0) { cin >> p[i]; p[i]--; AR[p[i]].push_back(i); } cin >> reg[i]; reg[i]--; Habs[reg[i]].push_back(i); } Fenwick FT(N); vector<int> deb(N), fin(N); int cur = 0; dfs(0, AR, deb, fin, cur); for (int i = 0; i < Q; i++) { int r1, r2; cin >> r1 >> r2; r1--, r2--; int ans = 0; for (auto j : Habs[r1]) FT.update(deb[j], fin[j], 1); for (auto j : Habs[r2]) ans += FT.PQ(deb[j]); for (auto j : Habs[r1]) FT.update(deb[j], fin[j], -1); cout << ans << endl; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...