제출 #1211935

#제출 시각아이디문제언어결과실행 시간메모리
1211935guagua0407Event Hopping 2 (JOI21_event2)C++20
100 / 100
142 ms19784 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={R[i],L[i]}; vec[i].s=i; } vec[n]={{0,0},n}; vec[n+1]={{inf,inf+1},n+1}; L[n+1]=inf; R[n+1]=inf+1; 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({R[id],0}); f[id][0]=(*it).s; } { S.insert({L[id],id}); auto it=S.find({L[id],id}); if(it!=S.end() and (*next(it)).f==L[id]){ S.erase(next(it)); it=S.find({L[id],id}); } while(it!=S.begin()){ S.erase(prev(it)); it=S.find({L[id],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]; } } 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

컴파일 시 표준 에러 (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...