Submission #1211914

#TimeUsernameProblemLanguageResultExecution timeMemory
1211914guagua0407Event Hopping 2 (JOI21_event2)C++20
0 / 100
70 ms18756 KiB
//#pragma GCC optimize("O3") #include <bits/stdc++.h> using namespace std; #define ll long long #define pii pair<int,int> #define f first #define s second #define all(x) x.begin(),x.end() #define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int dx[4]={0,0,1,-1}; int dy[4]={1,-1,0,0}; void setIO(string s) { freopen((s + ".in").c_str(), "r", stdin); freopen((s + ".out").c_str(), "w", stdout); } const int inf=1e9+5; int main(){_ int n,k; cin>>n>>k; vector<pair<pair<int,int>,int>> vec(n+2); vector<int> L(n+2),R(n+2); for(int i=0;i<n;i++){ cin>>L[i]>>R[i]; vec[i].f={L[i],R[i]}; vec[i].s=i; } vec[n]={{0,0},n}; vec[n+1]={{inf,inf},n+1}; L[n+1]=inf; R[n+1]=inf; vector<vector<int>> f(n+2,vector<int>(20)); set<pair<int,int>> S; sort(all(vec)); f[n+1][0]=n+1; S.insert({inf,n+1}); for(int i=n;i>=0;i--){ int id=vec[i].s; { auto it=S.lower_bound({vec[i].f.s,0}); f[id][0]=(*it).s; } { S.insert({vec[i].f.f,id}); auto it=S.find({vec[i].f.f,id}); while(it!=S.begin() and R[(*prev(it)).s]>=R[id]){ S.erase(prev(it)); it=S.find({vec[i].f.f,id}); } } } for(int j=1;j<20;j++){ for(int i=0;i<=n+1;i++){ f[i][j]=f[f[i][j-1]][j-1]; } } S.clear(); S.insert({0,n}); S.insert({inf,n+1}); auto get=[&](int i,int j){ int ans=0; int x=i; for(int k=19;k>=0;k--){ if(R[f[x][k]]<L[j]){ ans+=(1<<k); x=f[x][k]; } } if(R[f[x][0]]<=L[j]) return ans+1; else return ans; }; auto banana=[&](int i,int j){ if(L[i]>L[j]) swap(i,j); return (R[i]>L[j]); }; vector<int> ans; int cur=get(n,n+1); for(int i=0;i<n;i++){ auto it=S.lower_bound({L[i],0}); if(banana((*it).s,i) or banana((*prev(it)).s,i)) continue; int cur2=cur-get((*prev(it)).s,(*it).s); cur2+=get((*prev(it)).s,i); cur2+=get(i,(*it).s); cur2++; //cout<<i+1<<' '<<cur2<<'\n'; if(cur2<k) continue; cur=cur2; ans.push_back(i); S.insert({L[i],i}); } if((int)ans.size()<k){ cout<<-1<<'\n'; } else{ for(int i=0;i<k;i++){ cout<<ans[i]+1<<'\n'; } } return 0; } //maybe its multiset not set //yeeorz //diaoborz

Compilation message (stderr)

event2.cpp: In function 'void setIO(std::string)':
event2.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
event2.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "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...