POJ-2376 Cleaning Shifts

 1 #include <iostream>
 2 #include <algorithm>
 3 #define _for(i,a,b) for(int i = (a);i < b;i ++)
 4 #define _rep(i,a,b) for(int i = (a);i > b;i --)
 5 #define INF 0x3f3f3f3f
 6 typedef long long ll;
 7 using namespace std;
 8 inline ll read()
 9 {
10     ll ans = 0;
11     char ch = getchar(), last = ' ';
12     while(!isdigit(ch)) last = ch, ch = getchar();
13     while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
14     if(last == '-') ans = -ans;
15     return ans;
16 }
17 inline void write(ll x)
18 {
19     if(x < 0) x = -x, putchar('-');
20     if(x >= 10) write(x / 10);
21     putchar(x % 10 + '0');
22 }
23 struct section
24 {
25     int l;
26     int r;
27     bool operator < (section b)
28     {
29         if(l != b.l)
30             return l < b.l;
31         return r < b.r;
32     }
33 };
34 int N,T;
35 section a[25003];
36 int main()
37 {
38     N = read(),T = read();
39 
40     _for(i,1,N+1)
41         a[i].l = read(),a[i].r = read();
42     
43     sort(a+1,a+N+1);
44     
45     int l = 0,i = 0;
46     int rnt = 0;
47     while(l < T)
48     {
49         int maxr = -1;
50         while(a[++i].l <= l+1 && i < N+1)
51             maxr = max(maxr,a[i].r);
52         if(i > N+1)
53             break;
54         if(maxr==-1)    {printf("-1\n");return 0;}
55         rnt ++;
56         i --;
57         l = maxr;
58     }
59     printf("%d\n",rnt);
60     return 0;
61 }

 

转载于:https://www.cnblogs.com/Asurudo/p/11393507.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值