[HDOJ6119] 小小粉丝度度熊(尺取)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119

合并有重叠的段后尺取。

 1 /*
 2 ━━━━━┒ギリギリ♂ eye!
 3 ┓┏┓┏┓┃キリキリ♂ mind!
 4 ┛┗┛┗┛┃\○/
 5 ┓┏┓┏┓┃ /
 6 ┛┗┛┗┛┃ノ)
 7 ┓┏┓┏┓┃
 8 ┛┗┛┗┛┃
 9 ┓┏┓┏┓┃
10 ┛┗┛┗┛┃
11 ┓┏┓┏┓┃
12 ┛┗┛┗┛┃
13 ┓┏┓┏┓┃
14 ┃┃┃┃┃┃
15 ┻┻┻┻┻┻
16 */
17 #include <bits/stdc++.h>
18 using namespace std;
19 #define fr first
20 #define sc second
21 #define cl clear
22 #define BUG puts("here!!!")
23 #define W(a) while(a--)
24 #define pb(a) push_back(a)
25 #define Rint(a) scanf("%d", &a)
26 #define Rll(a) scanf("%I64d", &a)
27 #define Rs(a) scanf("%s", a)
28 #define Cin(a) cin >> a
29 #define FRead() freopen("in", "r", stdin)
30 #define FWrite() freopen("out", "w", stdout)
31 #define Rep(i, len) for(int i = 0; i < (len); i++)
32 #define For(i, a, len) for(int i = (a); i < (len); i++)
33 #define Cls(a) memset((a), 0, sizeof(a))
34 #define Clr(a, x) memset((a), (x), sizeof(a))
35 #define Full(a) memset((a), 0x7f7f7f, sizeof(a))
36 #define lrt rt << 1
37 #define rrt rt << 1 | 1
38 #define pi 3.14159265359
39 #define RT return
40 #define lowbit(x) x & (-x)
41 #define onenum(x) __builtin_popcount(x)
42 typedef long long LL;
43 typedef long double LD;
44 typedef unsigned long long ULL;
45 typedef pair<int, int> pii;
46 typedef pair<string, int> psi;
47 typedef pair<LL, LL> pll;
48 typedef map<string, int> msi;
49 typedef vector<int> vi;
50 typedef vector<LL> vl;
51 typedef vector<vl> vvl;
52 typedef vector<bool> vb;
53
54 const int maxn = 100100;
55 int n;
56 LL m;
57 pll seg[maxn];
58
59 signed main() {
60     // freopen("in", "r", stdin);
61     while(~Rint(n)) {
62         Rll(m);
63         For(i, 1, n+1) {
64             Rll(seg[i].first);
65             Rll(seg[i].second);
66         }
67         sort(seg+1, seg+n+1);
68         int tn = n;
69         n = 0;
70         For(i, 1, tn+1) {
71             if(i != 1 && seg[i].first <= seg[n].second) {
72                 seg[n].second = max(seg[n].second, seg[i].second);
73             }
74             else seg[++n] = seg[i];
75         }
76         int lo = 1;
77         LL cur = 0, ret = 0;
78         For(i, 1, n+1) {
79             if(i != 1) {
80                 cur += seg[i].first - seg[i-1].second - 1;
81             }
82             while(i != 1 && cur > m) {
83                 cur -= seg[lo+1].first - seg[lo].second - 1;
84                 lo++;
85             }
86             ret = max(ret, seg[i].second - seg[lo].first + 1 + m - cur);
87         }
88         printf("%I64d\n", ret);
89     }
90     return 0;
91 }
时间: 2024-10-17 04:02:10

[HDOJ6119] 小小粉丝度度熊(尺取)的相关文章

Hdu-6119 小小粉丝度度熊 尺取

题面 题意:在一大段时间里,告诉你,你签到了哪些区间,现在再给你m张补签卡,问你最多能实现连续签到多少天 题解:那些时间区间是有重叠的,所以我们先排序离散,并得到哪些区间是可以补签的,这样问题就变成,签过的天是0,没签过的是1,然后问区间和<=m的最大长度是多少,就转换为Poj-3061差不多一样的问题了(长度最长与最短). 1 #include<bits/stdc++.h> 2 #define N 100010 3 using namespace std; 4 struct rec 5

HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017&quot;百度之星&quot;程序设计大赛 - 初赛(B))

小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1572    Accepted Submission(s): 513 Problem Description 度度熊喜欢着喵哈哈村的大明星--星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是

hdu 6119 小小粉丝度度熊

小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1299    Accepted Submission(s): 419 Problem Description 度度熊喜欢着喵哈哈村的大明星--星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是

HDU 6119 2017百度之星初赛B 小小粉丝度度熊 (二分)

小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 197    Accepted Submission(s): 78 Problem Description 度度熊喜欢着喵哈哈村的大明星——星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是,星

百度之星2017 HDU 6119 小小粉丝度度熊 二分+双指针

小小粉丝度度熊 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 Description 度度熊喜欢着喵哈哈村的大明星--星星小姐.为什么度度熊会喜欢星星小姐呢?首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听.但这都不是最重要的,最重要的是,星星小姐拍的一手好代码!于是度度熊关注了星星小姐的贴吧.一开始度度熊决定每天都在星星小姐的贴吧里面签到.但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到.不过

hdu 6119 小小粉丝度度熊(区间双指针)

题目链接:hdu 6119 小小粉丝度度熊 题意: 给你n个区间,和一个数m,m表示可补上不连续的位置累计和为m,现在问你最长的连续区间和为多少. 题解: 我可能写的有点复杂,大概就是将每个区间排序后离散化,将这些间隔看成一个点,然后双指针一下. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int i=(a);i<=(b);++i) 4 using na

hdu 6119 小小粉丝度度熊 (区间处理+尺取)

http://acm.hdu.edu.cn/showproblem.php?pid=6119 解题思路:给出的出发时间和结束时间对有重合的部分进行处理,然后用尺取法找出最后的结果.比赛的时候的确想到了用尺取的想法完成题目,但是代码能力不行没有想出来. AC代码: 1 #include <iostream> 2 #include <bits/stdc++.h> 3 using namespace std; 4 const int maxn=100005; 5 struct node

小小粉丝度度熊

链接:http://acm.hdu.edu.cn/showproblem.php?pid=6119 Problem Description 度度熊喜欢着喵哈哈村的大明星--星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是,星星小姐拍的一手好代码! 于是度度熊关注了星星小姐的贴吧. 一开始度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签

2017&quot;百度之星&quot;程序设计大赛 - 初赛(B)小小粉丝度度熊

Problem Description 度度熊喜欢着喵哈哈村的大明星--星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是,星星小姐拍的一手好代码! 于是度度熊关注了星星小姐的贴吧. 一开始度度熊决定每天都在星星小姐的贴吧里面签到. 但是度度熊是一个非常健忘的孩子,总有那么几天,度度熊忘记签到,于是就断掉了他的连续签到. 不过度度熊并不是非常悲伤,因为他有m张补签卡,每一张补签卡可以使得某一忘签到的天,变成签到的状