제출 #478178

#제출 시각아이디문제언어결과실행 시간메모리
478178Abrar_Al_SamitRegions (IOI09_regions)C++17
컴파일 에러
0 ms0 KiB
#pragma GCC optimize("Ofast") #include<bits/stdc++.h> using namespace std; const int MX = 200005; struct FenwickTree { vector<int> bit; // binary indexed tree int n = MX; int sum(int r) { if(bit.empty()) bit.resize(n); int ret = 0; for (; r >= 0; r = (r & (r + 1)) - 1) ret += bit[r]; return ret; } int sum(int l, int r) { return sum(r) - sum(l - 1); } void add(int idx, int delta) { if(bit.empty()) bit.resize(n); for (; idx < n; idx = idx | (idx + 1)) bit[idx] += delta; } }; const int B = 447; int N, R, Q; vector <int> g[MX], region[MX]; int H[MX], st[MX], en[MX], timer=1, stwho[MX]; long long prep[B+10][MX]; void Flat(int v, int p) { stwho[timer] = v; st[v] = timer++; region[H[v]].push_back(st[v]); for(auto to : g[v]) if(to!=p) { Flat(to, v); } en[v] = timer-1; } int main() { cin >> N >> R >> Q; cin >> H[1]; for(int i=2; i<=N; ++i) { int p; cin >> p >> H[i]; g[p].push_back(i); } Flat(1, 1); vector <int> bigs; int index[R+1], cur=0; for(int i=1; i<=R; ++i) if(region[i].size()>B) { bigs.push_back(i); index[i] = cur++; } FenwickTree A; for(int all=1; all<=R; ++all) { for(auto it : region[all]) { A.add(st[it], 1); } for(auto b : bigs) { if(prep[index[b]].empty()) prep[index[b]].resize(R+1); for(auto it : region[index[b]]) { prep[index[b]][all] += A.sum(st[it], en[it]); } } for(auto it : region[all]) { A.add(st[it], -1); } } // O(Q(rootNlogN + logR)) while(Q--) { int r1, r2; cin >> r1 >> r2; long long ans = 0; if(region[r1].size()>B) { ans = prep[index[r1]][r2]; } else { for(auto p1 : region[r1]) { auto it = upper_bound(region[r2].begin(), region[r2].end(), en[stwho[p1]]); auto it2 = lower_bound(region[r2].begin(), region[r2].end(), p1); ans += it-it2; } } cout << ans << endl; } return 0; }

컴파일 시 표준 에러 (stderr) 메시지

regions.cpp: In function 'int main()':
regions.cpp:62:22: error: request for member 'empty' in 'prep[index[b]]', which is of non-class type 'long long int [200005]'
   62 |    if(prep[index[b]].empty()) prep[index[b]].resize(R+1);
      |                      ^~~~~
regions.cpp:62:46: error: request for member 'resize' in 'prep[index[b]]', which is of non-class type 'long long int [200005]'
   62 |    if(prep[index[b]].empty()) prep[index[b]].resize(R+1);
      |                                              ^~~~~~