Submission #1294958

#TimeUsernameProblemLanguageResultExecution timeMemory
1294958simona1230Event Hopping 2 (JOI21_event2)C++20
32 / 100
3094 ms14960 KiB
#include <bits/stdc++.h> using namespace std; void speed() { ios_base::sync_with_stdio(NULL); cin.tie(nullptr); cout.tie(nullptr); } struct segm { int first,second,i; segm(){} segm(int f,int s,int id) { first=f; second=s; i=id; } }; int intersect(segm s,pair<int,int> p) { return s.first==p.first&&s.second==p.second||s.first>p.first&&s.first<p.second||s.second>p.first&&s.second<p.second|| p.first>s.first&&p.first<s.second||p.second>s.first&&p.second<s.second; } int n,k; segm p[200001]; pair<int,int> a[200001]; vector<int> h; map<int,int> mp; bool cmp(segm s1,segm s2) { return s1.first<s2.first; } void read() { cin>>n>>k; for(int i=1;i<=n;i++) { cin>>p[i].first>>p[i].second; h.push_back(p[i].first); h.push_back(p[i].second); } sort(h.begin(),h.end()); int num=0; for(int i=0;i<2*n;i++) { if(i==1||h[i]!=h[i-1])num++; mp[h[i]]=num; } for(int i=1;i<=n;i++) { p[i].first=mp[p[i].first]; p[i].second=mp[p[i].second]; p[i].i=i; a[i].first=p[i].first; a[i].second=p[i].second; } sort(p+1,p+n+1,cmp); } int dp[200001]; vector<int> ans; int u[200001],u1[200001]; void solve() { /*for(int i=1;i<=n;i++) cout<<a[i].first<<" "<<a[i].second<<endl; cout<<"---"<<endl; for(int i=1;i<=n;i++) cout<<p[i].first<<" "<<p[i].second<<endl; cout<<"---"<<endl;*/ for(int i=1;i<=n;i++) { if(ans.size()==k)break; if(u[i])continue; for(int j=1;j<=2*n;j++) u1[j]=dp[j]=0; for(int j=1;j<=n;j++) { if(intersect(p[j],a[i])) u1[p[j].i]=1; } int maxx=1,pt=0; for(int j=1;j<=n;j++) { int id=p[j].i; if(u[id]||u1[id])continue; while(pt<=p[j].first) { maxx=max(maxx,dp[pt]); pt++; } dp[p[j].second]=max(dp[p[j].second],maxx+1); } while(pt<=2*n) { maxx=max(maxx,dp[pt]); pt++; } /*for(int j=1;j<=n;j++) cout<<max(u[j],u1[j])<<" "; cout<<endl; cout<<i<<" "<<maxx<<endl;*/ if(maxx>=k-ans.size()) { ans.push_back(i); for(int j=1;j<=2*n;j++) u[j]=max(u[j],u1[j]); } } if(ans.size()<k)cout<<-1<<endl; else for(int i=0;i<ans.size();i++) { cout<<ans[i]<<endl; } } int main() { speed(); read(); solve(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...