Submission #1147370

#TimeUsernameProblemLanguageResultExecution timeMemory
1147370ttamxRMQ (NOI17_rmq)C++20
100 / 100
38 ms9448 KiB
#include<bits/stdc++.h> using namespace std; int main(){ cin.tie(nullptr)->sync_with_stdio(false); int n,q; cin >> n >> q; vector<tuple<int,int,int>> qr(q); for(auto &[l,r,v]:qr){ cin >> l >> r >> v; } auto work=[&](const vector<tuple<int,int,int>> &a){ vector<int> res(n); vector<vector<pair<int,int>>> event(n); for(auto [l,r,v]:a){ event[l].emplace_back(v,r); } priority_queue<pair<int,int>> pq; for(int i=0;i<n;i++){ for(auto e:event[i]){ pq.emplace(e); } while(!pq.empty()&&pq.top().second<i){ pq.pop(); } res[i]=pq.empty()?-1:pq.top().first; } return res; }; auto validate=[&](bool ok){ if(ok)return; for(int i=0;i<n;i++){ cout << -1 << " \n"[i==n-1]; } exit(0); }; auto req=work(qr); vector<int> li(n,-1),ri(n,n); for(auto [l,r,v]:qr){ li[v]=max(li[v],l); ri[v]=min(ri[v],r); } vector<tuple<int,int,int>> need; for(int i=0;i<n;i++){ if(li[i]==-1)continue; validate(li[i]<=ri[i]); need.emplace_back(li[i],ri[i],i); } auto cur=work(need); vector<priority_queue<pair<int,int>>> pos(n); for(int i=0;i<n;i++){ if(cur[i]!=-1&&req[i]<=cur[i]){ pos[cur[i]].emplace(req[i],i); } } vector<int> ans(n,-1); for(int i=0;i<n;i++){ if(li[i]==-1)continue; validate(!pos[i].empty()); int j=pos[i].top().second; pos[i].pop(); ans[j]=i; } vector<pair<int,int>> leftover; for(int i=0;i<n;i++){ if(ans[i]==-1){ leftover.emplace_back(req[i],i); } } sort(leftover.begin(),leftover.end()); for(int i=0,p=0;i<n;i++){ if(li[i]!=-1)continue; auto [v,j]=leftover[p]; validate(v<=i); ans[j]=i; p++; } for(auto x:ans){ cout << x << " "; } cout << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...