Submission #1139386

#TimeUsernameProblemLanguageResultExecution timeMemory
1139386WarinchaiRMQ (NOI17_rmq)C++20
0 / 100
0 ms320 KiB
#include<bits/stdc++.h> using namespace std; int l[100005]; int r[100005]; int inf=1e6; struct segtree{ int info[400005]; int lz[400005]; void push(int st,int en,int i){ if(lz[i]==0)return; if(st==en)info[i]=max(lz[i],info[i]); else lz[i*2]=max(lz[i],lz[i*2]),lz[i*2+1]=max(lz[i],lz[i*2+1]); lz[i]=0; } void upd(int st,int en,int i,int l,int r,int val){ push(st,en,i); if(st>r||en<l)return; if(st>=l&&en<=r)return lz[i]=val,push(st,en,i); int m=(st+en)/2; upd(st,m,i*2,l,r,val); upd(m+1,en,i*2+1,l,r,val); info[i]=max(info[i*2],info[i*2+1]); } int fans(int st,int en,int i,int pos){ push(st,en,i); if(st==en)return info[i]; int m=(st+en)/2; if(pos<=m)return fans(st,m,i*2,pos); return fans(m+1,en,i*2+1,pos); } void print(int st,int en,int i){ push(st,en,i); if(st==en)return void(cerr<<info[i]<<" "); int m=(st+en)/2; print(st,m,i*2); print(m+1,en,i*2+1); } }tr; int vis[100005]; int ans[100005]; vector<int>lft; map<int,int>have; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); int n,q;cin>>n>>q; vector<pair<int,pair<int,int>>>v; for(int i=0;i<q;i++){ int st,en,x;cin>>st>>en>>x; st++,en++,x++; tr.upd(1,n,1,st,en,x); //tr.print(1,n,1); //cerr<<"\n"; have[x]++; } //cerr<<"work\n"; vector<pair<int,int>>pos; for(int i=1;i<=n;i++){ int x=tr.fans(1,n,1,i); if(x!=0&&!vis[x])ans[i-1]=x-1,vis[x]=1; else pos.push_back({x,i}); } for(auto x:have)if(vis[x.first]==0){ //cerr<<"covered\n"; for(int i=1;i<=n;i++)cout<<-1<<" "; return 0; } for(int i=1;i<=n;i++){ if(have[i]==0){ lft.push_back(i); } } sort(pos.begin(),pos.end()); //cerr<<"sz:"<<pos.size()<<lft.size()<<"\n"; for(int i=0;i<lft.size();i++){ ans[pos[i].second-1]=lft[i]-1; if(lft[i]<pos[i].first){ //cerr<<"too little\n"; for(int i=1;i<=n;i++)cout<<-1<<" "; return 0; } } for(int i=1;i<=n;i++)cout<<ans[i-1]<<" "; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...