Submission #1109411

#TimeUsernameProblemLanguageResultExecution timeMemory
1109411sanoRegions (IOI09_regions)C++14
Compilation error
0 ms0 KiB
#include<iostream> #include<vector> #include<queue> #include<deque> #include<string> #include<fstream> #include<algorithm> #include <iomanip> #include<map> #include <set> #include <unordered_map> #include <stack> #include <unordered_set> #include <cmath> #define ll long long #define For(i, n) for(ll i = 0; i < (ll)n; i++) #define ffor(i, a, n) for(ll i = (ll)a; i < (ll)n; i++) #define rfor(i, n) for(ll i = (ll)n; i >= (ll)0; i--) #define rffor(i, a, n) for(ll i = (ll)n; i >= (ll)a; i--) #define vec vector #define ff first #define ss second #define pb push_back #define shit short double #define pii pair<ll, ll> #define NEK 2147483640 #define mod 1000000007 #define mod2 1000000009 #define rsz resize #define prv1 43 #define prv2 47 #define D 8 using namespace std; vec<vec<ll>> g; vec<ll> eul1, eul2; vec<vec<ll>> odp; vec<ll> e; vec<vec<ll>> m; ll ti = 0; void DFS(ll x, ll pr) { eul1[x] = ti; ti++; m[e[x]].push_back(eul1[x]); for (auto i : g[x]) { if (i == pr) continue; DFS(i, x); } eul2[x] = ti - 1; return; } bool zorad(vec<ll>& a, vec<ll>& b) { return a.size() > b.size(); } void DFS2(ll x, ll pr, ll k, ll v = 0) { if (e[x] == k) v++; odp.back()[e[x]] += v; for (auto i : g[x]) { if (i == pr) continue; DFS2(i, x, k, v); } return; } int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); //ifstream cin("promote.in"); //ofstream cout("promote.out"); ll n, r, q; cin >> n >> r >> q; vec<vec<ll>> reg(r); g.resize(n); eul1.resize(n); eul2.resize(n); e.resize(n); cin >> e[0]; e[0]--; reg[e[0]].push_back(0); ffor(i, 1, n) { ll x; cin >> x; x--; g[x].push_back(i); g[i].push_back(x); cin >> e[i]; e[i]--; reg[e[i]].push_back(i); } m.resize(r); DFS(0, -1); sort(reg.begin(), reg.end(), zorad); vec<ll> s_n(r); For(i, reg.size()) { if (reg[i].size() == 0) s_n[i] = -1; s_n[e[reg[i][0]]] = i; } ll odm = ll(sqrt(n)); vec<ll> trol(r, 0); For(i, reg.size()) { if (reg[i].size() >= odm) { odp.push_back(trol); DFS2(0, -1, e[reg[i][0]]); } } For(i, m.size()) { sort(m[i].begin(), m[i].end()); } For(i, q) { ll r1, r2; cin >> r1 >> r2; r1--; r2--; if (s_n[r1] >= odp.size()) { ll vys = 0; for (auto i : reg[s_n[r1]]) { ll q1 = lower_bound(m[r2].begin(), m[r2].end(), eul1[i]) - m[r2].begin(); ll q2 = upper_bound(m[r2].begin(), m[r2].end(), eul2[i]) - m[r2].begin(); vys += q2 - q1; } cout << vys << '\n'; } else { cout << odp[s_n[r1]][r2] << '\n'; } } return 0; }

Compilation message (stderr)

regions.cpp: In function 'int main()':
regions.cpp:15:12: error: expected primary-expression before 'long'
   15 | #define ll long long
      |            ^~~~
regions.cpp:93:11: note: in expansion of macro 'll'
   93 |  ll odm = ll(sqrt(n));
      |           ^~
regions.cpp:96:21: warning: comparison of integer expressions of different signedness: 'std::vector<long long int>::size_type' {aka 'long unsigned int'} and 'long long int' [-Wsign-compare]
   96 |   if (reg[i].size() >= odm) {
      |       ~~~~~~~~~~~~~~^~~~~~
regions.cpp:106:15: warning: comparison of integer expressions of different signedness: '__gnu_cxx::__alloc_traits<std::allocator<long long int>, long long int>::value_type' {aka 'long long int'} and 'std::vector<std::vector<long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  106 |   if (s_n[r1] >= odp.size()) {