Submission #1010323

#TimeUsernameProblemLanguageResultExecution timeMemory
1010323ttamxFire (BOI24_fire)C++17
100 / 100
360 ms35528 KiB
#include<bits/stdc++.h> using namespace std; const int N=2e5+5; const int LG=18; const int INF=INT_MAX/2; int n,m; int l[N],r[N],vals[2*N]; int ans=INF; struct Fenwick{ int t[2*N]; void update(int i,int v){ for(;i<2*N;i+=i&-i)t[i]=max(t[i],v); } int query(int i){ int res=0; for(;i>0;i-=i&-i)res=max(res,t[i]); return res; } }f[LG]; int main(){ cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> m; for(int i=1;i<=n;i++){ cin >> l[i] >> r[i]; vals[i*2-1]=l[i],vals[i*2]=r[i]; } sort(vals+1,vals+2*n+1); for(int i=1;i<=n;i++){ l[i]=lower_bound(vals+1,vals+2*n+1,l[i])-vals; r[i]=lower_bound(vals+1,vals+2*n+1,r[i])-vals; } for(int i=1;i<=n;i++)if(l[i]<r[i])f[0].update(l[i],r[i]); for(int k=1;k<LG;k++){ for(int i=1;i<=2*n;i++){ f[k].update(i,f[k-1].query(f[k-1].query(i))); } } for(int i=1;i<=n;i++)if(r[i]<l[i]){ int p=r[i],res=1; for(int j=LG-1;j>=0;j--){ int x=f[j].query(p); if(x>=l[i])continue; p=x; res+=1<<j; } if(f[0].query(p)<l[i])continue; ans=min(ans,res+1); } cout << (ans==INF?-1:ans) << "\n"; }
#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...