Submission #1105226

#TimeUsernameProblemLanguageResultExecution timeMemory
1105226alexddFire (BOI24_fire)C++17
40 / 100
2084 ms2664 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1e9; int n,m; pair<int,int> v[200005]; int nxt[200005]; int get_ult(int lim) { int st=0,dr=n,ans=0; while(st<=dr) { int mij=(st+dr)/2; if(v[mij].first <= lim) { ans = mij; st = mij+1; } else dr = mij-1; } return ans; } void calc_nxt() { for(int i=1;i<=n;i++) { int mxm=v[i].second; nxt[i]=-1; for(int j=1;j<=get_ult(v[i].second);j++) { if(v[j].second > mxm) { mxm = v[j].second; nxt[i] = j; } } if(nxt[i]==i) nxt[i] = -1; //cout<<i<<" "<<nxt[i]<<" nxt\n"; } } int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>v[i].first>>v[i].second; if(v[i].first > v[i].second) v[i].second += m; } sort(v+1,v+1+n); calc_nxt(); int rez=INF; for(int i=1;i<=n;i++) { if(v[i].second >= m) { int unde=-1,mxm=-1; for(int j=1;j<=get_ult(v[i].second-m);j++) { if(v[j].second > mxm) { mxm = v[j].second; unde = j; } } if(unde==i) unde = -1; int cur=unde,cnt=1; while(cur!=-1) { cnt++; if(v[cur].second >= v[i].first) break; cur = nxt[cur]; } if(cur!=-1) rez = min(rez, cnt); } } if(rez==INF) rez=-1; cout<<rez; 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...