Submission #1283589

#TimeUsernameProblemLanguageResultExecution timeMemory
1283589lastgirlTourism (JOI23_tourism)C++20
Compilation error
0 ms0 KiB
#pragma GCC optimize("Ofast,unroll-loops") #pragma GCC target("avx2") #include <bits/stdc++.h> // User: Kazuki_Will_Win_VOI_8703 using namespace std; #define fi first #define se second #define pii pair<int, int> #define ll long long #define all(a) a.begin(), a.end() const int mn = 2e5 + 5, lg = 20, inf = 1e5 + 5, mod = 1000000007, B = 450; int n, m, q, on[mn], up[mn][lg], heavy[mn], d[mn], st[mn], ft[mn], euler[mn], timer_dfs = 0, ans[mn], lg2[mn]; vector <int> a[mn]; void pre_dfs(int u, int p){ st[u] = ++ timer_dfs; d[u] = d[p] + 1; euler[timer_dfs] = u; for(auto v : a[u]){ if(v == p) continue; pre_dfs(v, u); euler[++ timer_dfs] = u; } ft[u] = timer_dfs; } int higher(int u, int v){ if(d[u] < d[v]) return u; return v; } void build(){ for(int i = 1; i <= timer_dfs; i++) up[i][0] = euler[i]; for(int j = 1; j <= 17; j++){ for(int i = 1; i + (1 << j) <= timer_dfs; i++){ up[i][j] = higher(up[i][j - 1], up[i + (1 << (j - 1))][j - 1]); } } lg2[0] = -1; for(int i = 1; i <= timer_dfs; i++) lg2[i] = lg2[i / 2] + 1; } int lca(int u, int v){ if(st[u] > st[v]) swap(u, v); int l = st[u], r = st[v], j = lg2[r - l + 1]; return higher(up[l][j], up[r - (1 << j) + 1][j]); } int kc(int u, int v){ int p = lca(u, v); return d[u] + d[v] - 2 * d[p]; } int cur = 0, freq[mn], bit[mn]; void add(int i, int v) { for (; i <= timer_dfs; i += i & -i) bit[i] += v; } int get(int i) { int s = 0; for (; i > 0; i -= i & -i) s += bit[i]; return s; } int get_k(int k) { int pos = 0, curr = 0; for (int d = 1 << 21; d > 0; d >>= 1) { if (pos + d <= timer_dfs && curr + bit[pos + d] < k) { pos += d; curr += bit[pos]; } } return pos + 1; } void add(int i){ int u = on[i]; freq[u] ++; if(freq[u] == 1){ add(st[u], +1); int cnt = get(timer_dfs); int k = get(st[u]); int prev_k = (k == 1 ? cnt : k - 1); int next_k = (k == cnt ? 1 : k + 1); int u_prev = euler[ get_k(prev_k) ]; int u_next = euler[ get_k(next_k) ]; cur -= kc(u_prev, u_next); cur += kc(u_prev, u) + kc(u, u_next); } } void del(int i){ int u = on[i]; freq[u] --; if(freq[u] == 0){ int cnt = get(timer_dfs); int k = get(st[u]); int prev_k = (k == 1 ? cnt : k - 1); int next_k = (k == cnt ? 1 : k + 1); int u_prev = euler[get_k(prev_k)]; int u_next = euler[get_k(next_k)]; cur += kc(u_prev, u_next); cur -= kc(u_prev, u) + kc(u, u_next); add(st[u], -1); } } struct Megumi{ int l, r, id; bool operator< (const Megumi& other) const { if(l / B == other.l / B) { if((l / B) & 1) return r < other.r; return r > other.r; } return l < other.l; } } e[mn]; void solve(){ cin >> n >> m >> q; for(int i = 1; i < n; i++){ int u, v; cin >> u >> v; a[u].push_back(v); a[v].push_back(u); } pre_dfs(1, 0); build(); for(int i = 1; i <= m; i++) cin >> on[i]; for(int i = 1; i <= q; i++){ cin >> e[i].l >> e[i].r; e[i].id = i; } sort(e + 1, e + q + 1); int ptrl = e[1].l, ptrr = e[1].r; for(int i = e[1].l; i <= e[1].r; i++){ add(i); } // cerr << cur << '\n'; ans[e[1].id] = cur / 2; for(int i = 2; i <= q; i++){ while(ptrl < e[i].l) del(ptrl ++); while(ptrl > e[i].l) add(-- ptrl); while(ptrr < e[i].r) add(++ ptrr); while(ptrr > e[i].r) del(ptrr --); ans[e[i].id] = cur / 2; // cerr << e[i].id << ' ' << ans[e[i].id] << '\n'; } for(int i = 1; i <= q; i++) cout << ans[i] + 1 << '\n'; } signed main(){ ios::sync_with_stdio(false); cin.tie(nullptr); if (fopen(".inp", "r")) { freopen(".inp", "r", stdin); freopen(".out", "w", stdout); } int t = 1; // cin >> t; while(t--) solve(); }

Compilation message (stderr)

tourism.cpp: In function 'int main()':
tourism.cpp:165:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  165 |         freopen(".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~
tourism.cpp:166:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  166 |         freopen(".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/string:43,
                 from /usr/include/c++/13/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:52,
                 from tourism.cpp:3:
/usr/include/c++/13/bits/allocator.h: In destructor 'constexpr std::_Vector_base<int, std::allocator<int> >::_Vector_impl::~_Vector_impl()':
/usr/include/c++/13/bits/allocator.h:184:7: error: inlining failed in call to 'always_inline' 'constexpr std::allocator< <template-parameter-1-1> >::~allocator() noexcept [with _Tp = int]': target specific option mismatch
  184 |       ~allocator() _GLIBCXX_NOTHROW { }
      |       ^
In file included from /usr/include/c++/13/vector:66,
                 from /usr/include/c++/13/functional:64,
                 from /usr/include/x86_64-linux-gnu/c++/13/bits/stdc++.h:53:
/usr/include/c++/13/bits/stl_vector.h:133:14: note: called from here
  133 |       struct _Vector_impl
      |              ^~~~~~~~~~~~