洛谷 P2684 搞清洁

题目描述

FJ准备分配它的N只奶牛(1 <= N <= 25,000) 做清洁工作,他把一天分成T(1 <= T <= 1,000,000)个时间段,他希望每一个时间段都有奶牛在清洁,但搞清洁的奶牛数越少越好。

输入输出格式

输入格式:

 

第一行,两下整数N和T。

接下来N行,每行两个整数,表示第i头奶牛能工作的时间段。

 

输出格式:

 

使每一个时间段都有奶牛工作的最少奶牛数,如果不可能,则输出-1。

 

输入输出样例

输入样例#1: 复制
3 10
1 7
3 6
8 10
输出样例#1: 复制
2

说明

样例解释:

有3头奶牛,第1头能工作的时间段是1至7,即从时间1开始工作,时间7结束(时间7也在工作的),第2头是3-6,第3头是8-10,则只需要第1头和第3头奶牛就能使每一个时间都有奶牛工作。

思路:此题卡我的map

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm> 
using namespace std;
int n,m,a[1000010];
int temp,start,end,sum; 
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        int t,t1;
        cin>>t>>t1;
        if(a[t]<t1)    a[t]=t1;
    }
    while(temp<m){
        for(int i=start+1;i<=end+1;i++)
            if(temp<a[i])    temp=a[i];
        if(temp<end+1){
            cout<<-1;
            return 0;
        }
        start=end;
        end=temp;
        sum++;
    }
    cout<<sum;
}

 

posted @ 2017-12-03 16:43  一蓑烟雨任生平  阅读(275)  评论(0编辑  收藏  举报