Submission #1167726

#TimeUsernameProblemLanguageResultExecution timeMemory
1167726knhatdevJoker (BOI20_joker)C++20
0 / 100
266 ms30880 KiB
#include<bits/stdc++.h> #define int long long #define ii pair<int,int> #define iv pair<ii, ii> #define fi first #define se second #define task "ODD" using namespace std; const int N = 1e6 + 5, mod = 1e9 + 7; int n, m, q, L, R, par[N], sz[N]; int check, ans[N]; vector<iv> his; struct edge{ int u, v; } e[N]; struct query{ int l, r, id; } qr[N]; int acs(int u){ while(u != par[u]) u = par[u]; return u; } void join(int u, int v, int type){ // cout << u << ' ' << v << '\n'; u = acs(u); v = acs(v); if(u == v){ // cout << "cc" << u << ' ' << v << '\n' << '\n'; check++; his.push_back({{1, type}, {0, 0}}); } else { // cout << u << ' ' << v << "vv\n"; if(sz[u] < sz[v]) swap(u, v); his.push_back({{2, type}, {v, par[v]}}); par[v] = u; sz[u] += sz[v]; } } void rollback() { iv x = his.back(); his.pop_back(); if(x.fi.se == 1) L++; else if(x.fi.se == 2) R--; if(x.fi.fi == 1){ check--; } else { int v = x.se.fi, parv = x.se.se; // cout << v << ' ' << parv << '\n'; sz[par[v]] -= sz[v]; par[v] = parv; } } void add(int id, int type){ // cout << e[id].u << ' ' << e[id].v << ' ' << id << '\n'; join(e[id].u + n, e[id].v, 0); join(e[id].u, e[id].v + n, type); } main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if(fopen(task ".inp", "r")){ freopen(task ".inp", "r", stdin); freopen(task ".out", "w", stdout); } cin >> n >> m >> q; for(int i = 1; i <= 2*n; i++){ par[i] = i; sz[i] = 1; } for(int i = 1; i <= m; i++){ cin >> e[i].u >> e[i].v; e[i + m] = e[i]; } for(int i = 1; i <= q; i++){ cin >> qr[i].r >> qr[i].l; qr[i].l++; qr[i].r += m - 1; qr[i].id = i; // cout << qr[i].l << ' ' << qr[i].r << '\n'; } sort(qr + 1, qr + 1 + q, [](query x, query y){ int S = sqrt(m); if(x.l/S != y.l/S){ return x.l/S < y.l/S; } return x.r < y.r; }); L = m + 1, R = m; for(int i = 1; i <= q; i++){ // cout << qr[i].id << ' '; // cout << L << ' ' << R << '\n'; while(L < qr[i].l || R > qr[i].r){ if(L == m + 1 && R == m) break; // cout << L << ' ' << R << '\n'; rollback(); } // cout << check << '\n'; // cout << L << ' ' << R << '\n'; // cout << qr[i].l << ' ' << qr[i].r << '\n'; while(L > qr[i].l){ add(--L, 1); // cout << L << ' ' << R << '\n'; } while(R < qr[i].r){ add(++R, 2); // cout << L << ' ' << R << '\n'; } // cout << L << ' ' << R << '\n'; // cout << L << ' ' << R << '\n'; // cout << check << '\n'; if(check) ans[qr[i].id] = 1; else ans[qr[i].id] = 0; // cout << '\n'; } for(int i = 1; i <= q; i++) if(ans[i]) cout << "YES\n"; else cout << "NO\n"; }

Compilation message (stderr)

Joker.cpp:66:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   66 | main(){
      | ^~~~
Joker.cpp: In function 'int main()':
Joker.cpp:69:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   69 |         freopen(task ".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
Joker.cpp:70:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |         freopen(task ".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
#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...