Submission #1281438

#TimeUsernameProblemLanguageResultExecution timeMemory
1281438whtthFire (BOI24_fire)C++20
100 / 100
121 ms21284 KiB
#include<bits/stdc++.h>
using namespace std;
int n, m, e[200001], s[200001], ma=0, ans=1e9, f[20][200001], tree[530001];
pair<int, int> a[200001];
int process(int u, int v){
    if(a[v].second>a[u].second)return v;
    return u;
}
void build(int id, int l, int r){
    if(l==r){
        tree[id]=l;
        return;
    }
    int mid=(l+r)/2;
    build(id*2, l, mid);
    build(id*2+1, mid+1, r);
    tree[id]=process(tree[id*2], tree[id*2+1]);
}
int get(int id, int l, int r, int L, int R){
    if(l>R || L>r)return 0;
    if(L<=l and r<=R)return tree[id];
    int mid=(l+r)/2;
    return process(get(id*2, l, mid, L, R), get(id*2+1, mid+1, r, L, R));
}
int main(){
    ios::sync_with_stdio(0);cin.tie(nullptr);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>s[i]>>e[i];
        if(s[i]>e[i])e[i]+=m;
        a[i]={s[i], e[i]};
    }
    sort(a+1, a+n+1);
    build(1, 1, n);
    for(int i=1;i<=n;i++){
        auto[l, r]=a[i];
        pair<int, int> nxt={r+1, 0};
        int j=lower_bound(a+1, a+n+1, nxt)-a;
        f[0][i]=get(1, 1, n, i, j-1);
    }
    for(int i=1;i<=19;i++){
        for(int j=1;j<=n;j++){
            f[i][j]=f[i-1][f[i-1][j]];
        }
    }
    for(int i=1;i<=n;i++){
        int l=a[i].first, now=i, cnt=1;
        for(int j=19;j>=0;j--){
            int r=a[f[j][now]].second;
            if(r!=0 and r-l+1<=m){
                now=f[j][now];
                cnt+=(1<<j);
            }
        }
        int r=a[f[0][now]].second;
        if(r-l+1>m){
            ans=min(ans, cnt+1);
        }
    }
    if(ans==1e9)cout<<-1;
    else cout<<ans;
    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...