Submission #1272078

#TimeUsernameProblemLanguageResultExecution timeMemory
1272078win1702Fire (BOI24_fire)C++20
40 / 100
161 ms21148 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ld; #define MAXN 200005 #define MOD 1000000007 #define FOR(i, l, r) for (int i = l; i <= r; ++i) #define FOD(i, r, l) for (int i = r; i >= l; i--) #define fillchar(a, x) memset(a, x, sizeof(a)) #define rep(i, n) for (int i = 0, _n = (n); i < _n; ++i) #define BIT(x,i) ((x>>i)&1) #define MASK(i) (1ll<<(i)) #define FILE "" void fastip(){ ios_base::sync_with_stdio(0); cin.tie(0);cout.tie(0); if (fopen(FILE".inp","r")){ freopen(FILE".inp","r",stdin); freopen(FILE".out","w",stdout); } } const int MAX=200005; const ll INF=1000000010; const int div2=(MOD+1)/2; int m; struct Range{ int l, r; int fin; bool operator < (const Range &o){ if (l!=o.l) return l<o.l; return r<o.r; } }; int n; vector<Range> a; int up[MAX][20]; void solve(){ cin>>n>>m; vector<int> nen; rep(i,n){ int l,r; cin>>l>>r; if (l>r) r+=m; a.push_back({l,r,l+m}); nen.push_back(l); nen.push_back(r); nen.push_back(l+m); } nen.push_back(0); nen.push_back(m); nen.push_back(m*2); sort(nen.begin(),nen.end()); nen.erase(unique(nen.begin(),nen.end()),nen.end()); for(Range &rg:a){ rg.l=lower_bound(nen.begin(),nen.end(),rg.l)-nen.begin(); rg.r=lower_bound(nen.begin(),nen.end(),rg.r)-nen.begin(); rg.fin=lower_bound(nen.begin(),nen.end(),rg.fin)-nen.begin(); } sort(a.begin(),a.end()); // cout<<m<<'\n'; // for(Range rg: a) cout<<rg.l<<' '<<rg.r<<'\n';cout<<'\n'; int mx=nen.size(); memset(up,0,sizeof(up)); for(Range rg:a) up[rg.l][0]=max(up[rg.l][0],rg.r); FOR(i,1,mx-1) up[i][0]=max(up[i][0],up[i-1][0]); FOR(j,1,19) FOR(i,0,mx-1) up[i][j]=up[up[i][j-1]][j-1]; // FOR(j,0,19) {FOR(i,0,mx) cout<<up[i][j]<<' ';cout<<'\n';} // for(Range rg:a){ // int sta=rg.l; // int fin=rg.fin; // // cout<<sta<<' '<<fin<<'\n'; // // } int best=INF; for(Range rg:a){ int sta=rg.l; int fin=rg.fin; int cnt=0; FOD(j,19,0){ if (up[sta][j]<fin){ sta=up[sta][j]; cnt+=(1<<j); } } // cout<<cnt<<'\n'; if (up[sta][0]>=fin) best=min(best,cnt+1); } cout << (best==INF ? -1 : best); } int main(){ fastip(); solve(); }

Compilation message (stderr)

Main.cpp: In function 'void fastip()':
Main.cpp:22:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |         freopen(FILE".inp","r",stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
Main.cpp:23:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |         freopen(FILE".out","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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...