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...