• NC20302 国旗计划(倍增)


    首先破环成链,因为图中是一个环,所以转化成有n种可能性的链。

    输入如果右端点小,就+m

    一个显然的贪心是,既然选择当前点,那么下一个点的左端点越靠近当前点的右端越好

    这个成立的原因是,没有两个线段存在包含关系,因此左端点越右,右端点越右,这样覆盖的会尽可能的远。

    之后就可以用倍增优化进行跳跃,直到覆盖当前点所对应的这条链

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    typedef pair<int,int> pll;
    const int N=4e5+10;
    const int mod=1e9+7;
    struct node{
        int l,r;
        int id;
    }s[N];
    int f[N][25];
    int n,m;
    int ans[N];
    bool cmp(node a,node b){
        return a.l<b.l;
    }
    void init(){
        int now=1;
        int i,j;
        for(i=1;i<=2*n;i++){
            while(s[now].l<=s[i].r&&now<=2*n){
                now++;
            }
            f[i][0]=now-1;
        }
        for(j=1;j<=20;j++){
            for(i=1;i<=2*n;i++){
                f[i][j]=f[f[i][j-1]][j-1];
            }
        }
    }
    void solve(int x){
        int d=s[x].l+m;
        int res=1;
        int tmp=x;
        int i;
        for(i=20;i>=0;i--){
            if(f[x][i]!=0&&s[f[x][i]].r<d){
                res+=(1<<(i));
                x=f[x][i];
            }
        }
        ans[s[tmp].id]=res+1;
    }
    int main(){
        ios::sync_with_stdio(false);
        int i;
        cin>>n>>m;
        for(i=1;i<=n;i++){
            cin>>s[i].l>>s[i].r;
            if(s[i].l>s[i].r){
                s[i].r+=m;
            }
            s[i].id=i;
        }
        sort(s+1,s+1+n,cmp);
        for(i=1;i<=n;i++){
            s[i+n]=s[i];
            s[i+n].l+=m;
            s[i+n].r+=m;
        }
        init();
        for(i=1;i<=n;i++){
            solve(i);
        }
        for(i=1;i<=n;i++)
            cout<<ans[i]<<" ";
        cout<<endl;
        return 0;
    }
    View Code
    没有人不辛苦,只有人不喊疼
  • 相关阅读:
    有效解决 iOS The document “(null)” requires Xcode 8.0 or later.
    扫描项目里没有使用的图片mac工具,删除没有使用的图片以减小包的体积
    苹果客服
    那些你不愿说给领导的话
    没有自动联想补齐代码的解决办法
    第三方的使用
    mac系统如何显示和隐藏文件
    导航栏
    svn(http)
    2020Python练习五
  • 原文地址:https://www.cnblogs.com/ctyakwf/p/14639561.html
Copyright © 2020-2023  润新知