代码求调
查看原帖
代码求调
1060199
FcyTheFcy楼主2024/10/13 08:04
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2e5+7;
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define DOR(i,r,l) for(int i=r;i>=l;i--)
typedef long long ll;
struct soilder{
    int id;
    ll l,r;
    inline void init(int i,ll a,ll b){
        id=i;
        l=a;
        r=b;
    }
}sd[maxn<<1];
bool cmp(soilder a,soilder b){
    return a.l<b.l;
}
int go[maxn<<1][21],n,m,ans[maxn],c,d;
int main(){

    scanf("%d%d",&n,&m);
    FOR(i,1,n){
        scanf("%d%d",&c,&d);
        if(c>d)
            d+=m;
        sd[i].init(i,ll(c),ll(d));
    }
    sort(sd+1,sd+1+n,cmp);
    int n2=n<<1;
    FOR(i,1,n){
        sd[i+n]=sd[i];
        sd[i+n].r+=m;
        sd[i+n].l+=m;
    }
    int p=1;
    FOR(i,1,n2){
        while(sd[p].l<=sd[i].r&&p<=n2)
            p++;
        go[i][0]=p-1;
    }
    FOR(j,1,19)
        FOR(i,1,n2)
            if(i+(1<<j)<=n)
                go[i][j]=go[go[i][j-1]][j-1];
    FOR(i,1,n){
        ll cur=i;
        ll ed=sd[i].l+m;
        ans[sd[i].id]=2;
        DOR(j,19,0){
            if(sd[go[cur][j]].id&&sd[go[cur][j]].r<ed){
                ans[sd[i].id]+=1<<j;
                cur=go[cur][j];
            }
        }
    }
    FOR(i,1,n)
        printf("%d ",ans[sd[i].id]);
    return 0;
}

全WA,望有dalao帮忙纠正:)

2024/10/13 08:04
加载中...