[POI2010]Blocks】的更多相关文章

题解: 想了想发现只需要求出最长的一段平均值>k即可. 平均值的问题给每个数减去k,判断是否连续的一段>0即可. 然后我们发现如果i<j 且 s[i]<s[j],那么 j 对于l>j不会比i 优. 那我们就可以维护一个单调的s[i],然后对于每个l去二分出它的答案. 但这样会T. 再次考虑单调性. 如果 l>j,且s[l]>s[i],那么我们的答案最小也是l-i,所以j必须取比i小的s才有可能更新答案.然后就可以两个指针扫一遍了. 好吧 我承认我口胡... 代码:…
[Poi2010]Blocks Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 788  Solved: 356[Submit][Status][Discuss] Description 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1.经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k.…
Description 每次可以将大于 \(k\) 的一个数 \(-1\), 在左边或右边的数 \(+1\) ,问最大能得到多长的序列每个数都大于等于 \(k\) . Sol 单调栈. 这道题好神啊qwq...思路++ 首先如果一段序列满足 \(\sum_{i=l}^ri \geqslant k(r-l+1)\) 那么这个序列就是合法的,把所有的数都 \(-k\) 那么只需要满足非负即可. 然后从前往后找一个单调递减的前缀和序列,如果有小于等于前面的某个位置的前缀和,那么选这个不如选前面大于等于…
题意 \(n(1 \le n \le 1000000)\)个数\(a_i(a_i \le 10^9)\).\(m(1 \le m \le 50)\)次询问,每次给出一个\(k(k \le 10^9)\),可以执行操作:每次选择一个大于\(k\)的\(a_i\),将\(a_i\)减去\(1\),然后将\(a_{i-1}\)或\(a_{i+1}\)加上\(1\).然后求一个最长的连续子序列使得每个数都不小于\(k\). 分析 对于任意一串子序列\([l, r]\),如果\(\sum_{i=l}^{r…
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=2086 思路 这就有点妙了 题目意思就是让你求平均数>=k的最长序列 先求出a[i]-k的前缀和 就是求sum[i]-sum[j]>=0的最大i-j 当\(j<=k<=i sum[j]<=sum[k]\) 更新i的时候,k就不如j优 所以处理出来一个单调上升的数组(stak),那答案就在里面选啦 倒序更新,单调栈一直减减就好 因为如果用stak[top]更新了i,因为…
题目大意: 给你一个长度为n的数列,给你m个数k. 对于每个k,你可以进行若干次操作,每次把一个超过k的数的多余部分移到旁边一个数. 问对于每个k,进行若干次操作以后,最长的满足每个数都不小于k的区间长度. 思路: 一个区间可以通过若干次操作使得每个数都不小于k,当且仅当这个区间平均数大于等于k. 对于每个k,我们可以先O(n)求出这个序列每个数减去k的前缀和. 对于i>j,如果sum[i]>=sum[j],那么对于i之后的数,用i转移肯定比j更优. 因此我们可以维护一个关于前缀和的单调递减栈…
题目描述 给出N个正整数a[1..N],再给出一个正整数k,现在可以进行如下操作:每次选择一个大于k的正整数a[i],将a[i]减去1,选择a[i-1]或a[i+1]中的一个加上1.经过一定次数的操作后,问最大能够选出多长的一个连续子序列,使得这个子序列的每个数都不小于k.总共给出M次询问,每次询问给出的k不同,你需要分别回答. 输入输出格式 输入格式:第一行两个正整数N (N <= 1,000,000)和M (M <= 50).第二行N个正整数,第i个正整数表示a[i] (a[i] <…
POI2010题解 我也不知道我为什么就开始刷POI了 有些题目咕掉了所以不完整(我都不知道POI到底有多少题) [BZOJ2079][Poi2010]Guilds (貌似bz跟洛谷上的不是一个题?) 并查集判孤立点就行了. #include<cstdio> #include<algorithm> using namespace std; int gi(){ int x=0,w=1;char ch=getchar(); while ((ch<'0'||ch>'9')&a…
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem 10983 18765 Y 1036 [ZJOI2008]树的统计Count 5293 13132 Y 1588 [HNOI2002]营业额统计 5056 13607 1001 [BeiJing2006]狼抓兔子 4526 18386 Y 2002 [Hnoi2010]Bounce 弹飞绵羊 43…
因为long long还有PE的事WA了一下午TAT 考虑一段可行区间的平均值肯定>=k 也就是说将每个数减去k以后,一段可行区间的和非负,求一段最长区间. 一段区间的和肯定是两个前缀和的差 先求出前缀和,考虑要想让答案更优,被减数应该靠后而且大,减数应该靠前而且小 so维护两个单调队列然后two-pointers扫一遍就好了QwQ~ 记得输出行末必须换行&不能有空格 #include<iostream> #include<algorithm> #include<…