TLE90求助
查看原帖
TLE90求助
371927
REAL_曼巴楼主2024/10/9 09:04
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn = 1e6+5;
struct node{
    int l,r,id;
    friend bool operator < (node a,node b){
        return a.l<b.l;
    }
}a[maxn];
int f[maxn][20];
int ans[maxn];
int main(){
    cin.tie(0);
    ios::sync_with_stdio(false);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;++i){
        a[i].id=i;
        cin>>a[i].l>>a[i].r;
        if(a[i].l>a[i].r)a[i].r+=m;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;++i){
        a[i+n].id=a[i].id;
        a[i+n].l=a[i].l+m;
        a[i+n].r=a[i].r+m;
    }
    for(int i=1;i<=2*n;++i){
        int y=i;
        while(a[y].l<=a[i].r && y<=2*n)y++;
        f[i][0]=--y;
    }
    for(int k=1;k<20;++k){
        for(int j=1;j<=2*n;++j){
            f[j][k]=f[f[j][k-1]][k-1];
        }
    }
    for(int i=1;i<=n;++i){
        int y=i;
        int sum=1;
        for(int j=19;j>=0;--j){
            if(f[y][j]!=0 && a[f[y][j]].r<a[i].l+m)
                sum+=(1<<j),y=f[y][j];
        }
        ans[a[i].id]=++sum;
    }
    for(int i=1;i<=n;++i){
        cout<<ans[i]<<' ';
    }
    cout<<endl;
    return 0;
}

悬一关谢谢

2024/10/9 09:04
加载中...