Submission #887462

#TimeUsernameProblemLanguageResultExecution timeMemory
887462cpptowinCurtains (NOI23_curtains)C++17
100 / 100
1044 ms121008 KiB
#include<bits/stdc++.h> #define fo(i,d,c) for(int i=d;i<=c;i++) #define fod(i,c,d) for(int i=c;i>=d;i--) #define maxn 1000010 #define N 1010 #define fi first #define se second #define pb emplace_back #define en cout<<"\n"; #define int long long #define inf 1000000000 #define pii pair<int,int> #define vii vector<pii> #define lb(x) x&-x #define bit(i,j) ((i>>j)&1) #define offbit(i,j) (i^(1<<j)) #define onbit(i,j) (i|(1<<j)) #define vi vector<int> template <typename T1, typename T2> bool minimize(T1 &a, T2 b) { if (a > b) { a = b; return true; } return false; } template <typename T1, typename T2> bool maximize(T1 &a, T2 b) { if (a < b) { a = b; return true; } return false; } using namespace std; vi ke[maxn]; pii query[maxn]; int firstl[maxn],firstr[maxn]; vii adj[maxn]; int ans[maxn]; int n; void solve(int x,int y) { if(x > y) return; fo(i,x,y) firstl[i] = inf,firstr[i] = -inf; int mid = (x + y) >> 1; stack<pii> st; fod(i,mid,x) if(ke[i].size()) { int j = inf,k = -inf; for(int it : ke[i]) { if(it < mid) k = max(k,it); if(it >= mid) { j = it; break; } } firstl[i] = min(firstl[i],j); while(st.size() and st.top().se <= k + 1) { firstl[i] = min(firstl[i],st.top().fi); st.pop(); } st.push({firstl[i],i}); } while(st.size()) st.pop(); fo(i,min(mid,y),y) if(ke[i].size()) { int j = -inf,k = inf; fod(u,(int)ke[i].size() - 1,0) { if(ke[i][u] > mid) k = min(k,ke[i][u]); if(ke[i][u] <= mid) { j = ke[i][u]; break; } } firstr[i] = max(j,firstr[i]); while(st.size() and st.top().se >= k - 1) { firstr[i] = max(st.top().fi,firstr[i]); st.pop(); } st.push({firstr[i],i}); } fo(i,x,mid) { for(auto [u,id] : adj[i]) { if(u > y) break; if(firstl[i] <= u and firstr[u] >= i) ans[id] = 1; } } if(x == y) return; solve(x,mid); solve(mid + 1,y); } int m,q; main() { #define name "TASK" if(fopen(name".inp","r")) { freopen(name".inp","r",stdin); freopen(name".out","w",stdout); } ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> q; fo(i,1,m) { int u,v; cin >> u >> v; ke[u].pb(v); ke[v].pb(u); } fo(i,1,n) sort(ke[i].begin(),ke[i].end()); fo(i,1,q) { int u,v; cin >> u >> v; adj[u].pb(v,i); adj[v].pb(u,i); } fo(i,1,n) sort(adj[i].begin(),adj[i].end()); solve(1,n); fo(i,1,q) cout << (ans[i] ? "YES" : "NO") << "\n"; }

Compilation message (stderr)

curtains.cpp:104:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  104 | main()
      | ^~~~
curtains.cpp: In function 'int main()':
curtains.cpp:109:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  109 |         freopen(name".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
curtains.cpp:110:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  110 |         freopen(name".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...