Submission #933204

#TimeUsernameProblemLanguageResultExecution timeMemory
933204Erfan1386YJoker (BOI20_joker)C++17
100 / 100
229 ms13004 KiB
#include <bits/stdc++.h> #define file_io freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout); #define fast_io ios::sync_with_stdio(false);cin.tie(0); #define what(x) cerr << #x << " is " << x << '\n'; #define kill(x) {cout << x << endl; continue;} #define all(x) (x).begin(), (x).end() #define pii pair<int, int> #define pb push_back #define ll long long #define F first #define S second const ll inf = 1e18, mod = 1e9 + 7, delta = 1e9 + 9, SQ = 450, P = 6065621; using namespace std; const int N = 2e5 + 10, LG = 40; int par[N], sz[N], col[N], cnt, L, R, ans[N]; vector<pii> st; pii edges[N]; int root (int &v) { int res = 0; while (par[v] != v) res ^= col[v], v = par[v]; return res; } void mrg (pii e) { auto [v, u] = e; int r1 = root(v) , r2 = root(u); if (v == u) { if (r1 == r2) st.pb(pii(-2 , -2)), cnt++; else st.pb(pii(-1 , -1)); return; } if (sz[v] < sz[u]) swap(v , u); par[u] = v; sz[v] += sz[u]; st.pb(pii(v , u)); col[u] = r1 ^ r2 ^ 1; } void undo() { pii e = st.back(); st.pop_back(); if(e.F == -1) return; if(e.F == -2) {--cnt; return;} col[e.S] = 0; par[e.S] = e.S; sz[e.F] -= sz[e.S]; } void solve (int a, int b, int x, int y) { if (a > b) return; int save = st.size(); int mid = (a + b) >> 1; while (L < mid) mrg(edges[L++]); while (R > mid && !cnt) mrg(edges[R--]); ans[mid] = R; if (cnt == 0) ans[mid]--; while (st.size() > save) undo(); L = a, R = y; while (L <= mid) mrg(edges[L++]); solve(mid + 1, b, ans[mid], y); while (st.size() > save) undo(); L = a, R = y; while (R > ans[mid]) mrg(edges[R--]); solve(a, mid - 1, x, ans[mid]); while (st.size() > save) undo(); L = a, R = y; } int main () { fast_io; int n, m, q; cin >> n >> m >> q; L = 1, R = m; fill(sz + 1, sz + n + 1, 1); iota(par + 1, par + n + 1, 1); for (int i = 1; i <= m; i++) { cin >> edges[i].F >> edges[i].S; } solve(1, m, 1, m); while (q--) { int l, r; cin >> l >> r; if (r > ans[l]) cout << "NO\n"; else cout << "YES\n"; } return 0; }

Compilation message (stderr)

Joker.cpp: In function 'void solve(int, int, int, int)':
Joker.cpp:60:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   60 |   while (st.size() > save) undo();
      |          ~~~~~~~~~~^~~~~~
Joker.cpp:64:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   64 |   while (st.size() > save) undo();
      |          ~~~~~~~~~~^~~~~~
Joker.cpp:68:20: warning: comparison of integer expressions of different signedness: 'std::vector<std::pair<int, int> >::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   68 |   while (st.size() > save) undo();
      |          ~~~~~~~~~~^~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...