zoukankan      html  css  js  c++  java
  • 【BZOJ】1635: [Usaco2007 Jan]Tallest Cow 最高的牛

    【题意】n头牛,其中最高h。给定r组关系a和b,要求满足h[b]>=h[a]且a、b之间都小于min(h[a],h[b]),求第i头牛可能的最高高度。

    【算法】差分

    【题解】容易发现r组关系只能包含或不相交

    假设所有牛是最高高度

    对于一组关系(a,b)显然只需要让区间[a+1,b-1]整体-1就好了。使用差分维护。

    特别判断a=b和a=b+1和多区间LR一样的情况。

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<cctype>
    using namespace std;
    const int maxn=10010;
    int a[maxn],n,lll,h,m;
    struct cyc{int l,r;}b[maxn];
    bool cmp(cyc a,cyc b){return a.l<b.l||(a.l==b.l&&a.r<b.r);}
    int read(){
        char c;int s=0,t=1;
        while(!isdigit(c=getchar()))if(c=='-')t=-1;
        do{s=s*10+c-'0';}while(isdigit(c=getchar()));
        return s*t;
    }
    int main(){
        n=read();lll=read();h=read();m=read();
        for(int i=1;i<=m;i++){
            b[i].l=read();b[i].r=read();
            if(b[i].l>b[i].r)swap(b[i].l,b[i].r);
        }
        sort(b+1,b+m+1,cmp);int tot=1;
        for(int i=2;i<=m;i++)if(b[i].l!=b[i-1].l||b[i].r!=b[i-1].r)b[++tot]=(cyc){b[i].l,b[i].r};
        m=tot;
        for(int i=1;i<=m;i++)if(b[i].l<b[i].r-1){
            a[b[i].l+1]--;a[b[i].r]++;
        }
        for(int i=1;i<=n;i++)printf("%d
    ",h+=a[i]);
        return 0;
    }
    View Code
  • 相关阅读:
    27、驱动调试之修改系统时钟中断定位系统僵死问题
    25、驱动调试之打印到proc虚拟文件
    24、驱动调试之printk
    23、uevent/hotplug热拔插机制
    22、DMA驱动程序框架
    21、IIS声卡驱动程序
    20、RTC驱动程序
    ZOJ
    HDU-4272 LianLianKan (dfs)
    UVA-624 CD (01背包+路径记忆)
  • 原文地址:https://www.cnblogs.com/onioncyc/p/7657020.html
Copyright © 2011-2022 走看看