problem description
度度熊喜歡著喵哈哈村的大明星——星星小姐。
為什麼度度熊會喜歡星星小姐呢?
首先星星小姐笑起來非常動人,其次星星小姐唱歌也非常好聽。
但這都不是最重要的,最重要的是,星星小姐拍的一手好**!
於是度度熊關注了星星小姐的貼吧。
一開始度度熊決定每天都在星星小姐的貼吧裡面簽到。
但是度度熊是乙個非常健忘的孩子,總有那麼幾天,度度熊忘記簽到,於是就斷掉了他的連續簽到。
不過度度熊並不是非常悲傷,因為他有m張補簽卡,每一張補簽卡可以使得某一忘簽到的天,變成簽到的狀態。
那麼問題來了,在使用最多m張補簽卡的情況下,度度熊最多連續簽到多少天呢?
input
本題包含若干組測試資料。
第一行兩個整數n,m,表示有n個區間,這n個區間內的天數,度度熊都簽到了;m表示m張補簽卡。
接下來n行,每行兩個整數(l[i],r[i]),表示度度熊從第l[i]天到第r[i]天,都進行了簽到操作。
資料範圍:
1<=n<=100000
0<=m<=1000000000
0<=l[i]<=r[i]<=1000000000
注意,區間可能存在交叉的情況。
output
輸出度度熊最多連續簽到多少天。
因為區間交叉,首先預處理,找出不交叉的區間。
然後區間間隙求字首和。
掃瞄,某段和不大於m就是可行的,求最大的。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long ll;
typedef pair pii;
const
int n=1e5+9;
pii a[n];
int n,m;
ll sum[n];
int main()
sum[0]=0;
for(int i=1;i<=cnt;i++)sum[i]=sum[i-1]+a[i].first-a[i-1].second-1;
ll ans=0;
for(int l=0,r=0;l<=cnt && r<=cnt;l++)
printf("%lld\n",ans );
}return
0;}
HDU6119 小小粉絲度度熊
思路 如果我們把覆蓋的區間和未覆蓋的分開,那麼我們可以構造出乙個序列 例如 7543598 粗體的表示中間沒有簽到的部分,而相鄰的部分就是已經連續簽到了的部分。那麼題目實際上就是我們可以單獨的覆蓋m天,然後怎麼樣覆蓋才能獲得最大的連續區間,然後求出這個連續的區間大小。嗯,根據範圍基本上確定是乙個nl...
hdu6119 小小粉絲度度熊
題目傳送門 思路 首先題目中說區間可能有交叉,所以第一步我們先處理一下區間重疊的情況把重疊的區間合併一下 第二步我們只需要尺取一下找最大區間就可以了 include include include include using namespace std const int maxn 1e9 7 st...
HDU6119 小小粉絲度度熊(區間)
區間有n個區間,這n個區間內的天數,都簽到了,m表示m張補簽卡 區間可能存在交叉的情況,求最多連續簽到多少天 include include include include using namespace std typedef long long ll int n,m const int maxn...