Submission #1139869

#TimeUsernameProblemLanguageResultExecution timeMemory
1139869imarnRMQ (NOI17_rmq)C++20
100 / 100
57 ms14652 KiB
#include<bits/stdc++.h> #define ll long long #define pii pair<int,int> #define pll pair<ll,ll> #define plx pair<ll,int> #define f first #define s second #define pb push_back #define all(x) x.begin(),x.end() #define vi vector<int> #define vvi vector<vi> #define pp pair<ll,int> #define ub(x,i) upper_bound(all(x),i)-x.begin() #define lb(x,i) lower_bound(all(x),i)-x.begin() #define t3 tuple<int,int,int> using namespace std; const int mxn=1e5+5; vector<pii>g[mxn]; vector<pii>qr[mxn]; int a[mxn]{0}; int ans[mxn]{0}; bool vis[mxn]{0}; pii t[2*mxn]; multiset<int>ms; pii query(int l,int r,int sz,pii rs={1e9,1e9}){ for(l+=sz,r+=sz;l<r;l>>=1,r>>=1){ if(l&1)rs=min(rs,t[l++]); if(r&1)rs=min(rs,t[--r]); }return rs; } void update(int i,int sz){ i+=sz;t[i]={1e9,1e9}; for(i>>=1;i;i>>=1)t[i]=min(t[2*i],t[2*i+1]); } int main(){ ios_base::sync_with_stdio(0);cin.tie(0); int n,q;cin>>n>>q; for(int i=1;i<=q;i++){ int l,r,x;cin>>l>>r>>x;qr[x].pb({l,r}); g[l].pb({0,x});g[r+1].pb({1,x}); } for(int i=0;i<n;i++){ for(auto [x,y]:g[i]){ if(x==0)ms.insert(y); else ms.erase(ms.lower_bound(y)); }if(!ms.empty())a[i]=*(--ms.end()); } for(int i=0;i<n;i++)t[i+n]={a[i],i}; for(int i=n-1;i>0;i--)t[i]=min(t[2*i],t[2*i+1]); bool ok=0; for(int i=0;i<n;i++){ int mxl=-1,mnr=1e9; for(auto [l,r] : qr[i])mxl=max(mxl,l),mnr=min(mnr,r); if(mxl>mnr){ok=1;break;} if(mxl==-1)continue; pii rs=query(mxl,mnr+1,n); if(i<rs.f){ok=1;break;} ans[rs.s]=i;vis[i]=1; update(rs.s,n); }if(ok){for(int i=0;i<n;i++)cout<<-1<<' ';return 0;} for(int i=0;i<n;i++){ if(vis[i])continue; if(i<t[1].f){ok=1;break;} ans[t[1].s]=i;vis[i]=1; update(t[1].s,n); }if(ok){for(int i=0;i<n;i++)cout<<-1<<' ';return 0;} for(int i=0;i<n;i++)cout<<ans[i]<<' '; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...