搜索
查看: 2193|回复: 1
打印 上一主题 下一主题

[啊哈!算法] 区间覆盖(nlogn)

[复制链接]
跳转到指定楼层
楼主
发表于 2013-2-20 20:11:12 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
[code=Cpp width=700px]#include<iostream>
using namespace std;
struct abc
{
    int s,e;
}a[20];
void qs(int left,int right)
{
    if(left>=right)
        return;
    int i=left,j=right;
    a[0]=a;
    while(i<j)
    {
        while(i<j&&a[j].s>=a[0].s)
            j--;
        if(i<j)
            a=a[j];
        while(i<j&&a.s<=a[0].s)
            i++;
        if(i<j)
            a[j]=a;
    }
    a=a[0];
    qs(left,i-1);
    qs(i+1,right);
}
int main()
{
    int n,m,i,p,q,flag=0;
    cin>>n>>m;
    for(i=1;i<=m;i++)
    {   
        cin>>p>>q;
        if(p>q)
        {   
            a.s=q;
            a.e=p;
        }
        else
        {
            a.e=q;
            a.s=p;
        }
    }
    qs(1,m);
    int max1=0,sum=0,num=1;

    for(i=1;i<=m;i++)
    {
        if(a.s<=num)
        {
            if(max1<a.e)
            {
                max1=a.e;
            }

        }
        else
        {
            if(max1==0)
            {
                flag=1;
                break;

            }
            sum++;
            num=max1+1;
            max1=0;
        }

        if(num>n)
            break;

    }

    if(i==m+1)
    {
        if(a[m].e==n)
        {
            sum++;
        }
        else
            flag=1;
        if(a[m].s>num)
            flag=1;
    }

    cout<<endl;
    if(flag==0)
    cout<<sum<<endl;
    else
    cout<<"No";
    getchar();
    getchar();
    return 0;
}

/*
6 7
5 6
3 4
1 3
1 2
2 4
3 5
2 3
*/[/code]
沙发
小伙伴  发表于 2014-5-27 02:07:22
Why should we hire you? I think you know better then me sir.  xboter 2014
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表