国旗计划

时间:2019-09-18
本文章向大家介绍国旗计划,主要包括国旗计划使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include<iostream>
#include<algorithm>
using namespace std;
#define MAX 400005
struct p{int l,r,num;}a[MAX];
int jump[MAX][17],ans[MAX],tmp,n,m,top,l,r,now,to;
bool cmp(p a,p b){
    return a.l<b.l;
}
int main(){
    cin>>n>>m;
    a[0]=p{0x7fffffff,0x7fffffff,0x7fffffff};
    for(int i=1;i<=n;i++){
        cin>>l>>r;
        if(r<l)r+=m;
        a[++top]=p{l,r,i};
        a[++top]=p{l+m,r+m,0};
    }
    sort(a+1,a+2*n+1,cmp);
    for(int i=1,xibo=1;i<=2*n;i++){
        while(a[xibo].l<=a[i].r&&xibo<=2*n)xibo++;
        jump[i][0]=xibo-1;
    }
    for(int j=1;j<=16;j++)for(int i=1;i<=2*n;i++)jump[i][j]=jump[jump[i][j-1]][j-1];
    for(int i=1;i<=2*n;i++){
        if(a[i].num){
            tmp=0,now=i;
            for(int j=16;j>=0;j--)if(jump[now][j]&&a[jump[now][j]].r<a[i].l+m)now=jump[now][j],tmp+=(1<<j);
            ans[a[i].num]=tmp+2;
        }
    }
    for(int i=1;i<=n;i++)cout<<ans[i]<<" ";
}

原文地址:https://www.cnblogs.com/SZJZC/p/11543751.html

随机文章