【BZOJ】2086: [Poi2010]Blocks
题意
\(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} a_i \ge (r-l+1)*k\),则显然合法。
题解
所以首先将\(a_i\)减掉\(k\),然后求最大的\(r-l\)满足\((s_r - s_l) \ge 0 (0 \le l < r \le n)\)
发现不是很好求,于是有神做法:
首先求出关于\(a_i\)单调不增的栈\(s\),然后从右向左扫,由于求的是最大的\(r-l\),所以现在\(r\)(当前在\(i\))是逐渐减小,那么\(l\)(假设为\(j\))也要逐渐减小才对答案有贡献。所以就算存在一个\(k(k>j)\)满足\(s_i - s_k \ge 0\),对答案也是没贡献的。所以我们找到在栈里找到一个最小的\(j\)满足\(s_i-s_j \ge 0\)即可。
#include <bits/stdc++.h>
using namespace std;
inline int getint() {
int x=0, c=getchar();
for(; c<48||c>57; c=getchar());
for(; c>47&&c<58; x=x*10+c-48, c=getchar());
return x;
}
const int N=1000005;
typedef long long ll;
int a[N], s[N];
ll b[N];
int main() {
int n=getint(), m=getint();
for(int i=1; i<=n; ++i) {
a[i]=getint();
}
for(int t=1; t<=m; ++t) {
int k=getint(), *top=s;
*++top=0;
for(int i=1; i<=n; ++i) {
b[i]=a[i]-k+b[i-1];
if(b[*top]>b[i]) {
*++top=i;
}
}
int ans=0;
for(int i=n; i; --i) {
for(; top!=s && b[*top]<=b[i]; --top);
ans=max(ans, i-*(top+1));
}
printf("%d%c", ans, " \n"[t==m]);
}
return 0;
}
【BZOJ】2086: [Poi2010]Blocks的更多相关文章
- 【BZOJ】2084: [Poi2010]Antisymmetry
http://www.lydsy.com/JudgeOnline/problem.php?id=2084 题意:一个01串,求满足字符串0和1取反后,再将整个串反过来和原串一样的子串数目.(n< ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)
Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...
- 【BZOJ】【3083】遥远的国度
树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...
- 【BZOJ】【2434】【NOI2011】阿狸的打字机
AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...
- 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法
整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...
随机推荐
- 在ubuntu上搭建开发环境3---解决Y470一键系统重装之后恢复ubuntu引导启动的方法
2015/08/18 将知识.常用的操作整理出来一定要完整,注意细节. 就像下面是再2015.04.27时候整理的,当时确实实验成功了,但是可能忘记记下具体的细节,尤其是3.4.5.6步骤中的关于盘符 ...
- 【openGL】指定着色模型
#include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...
- 登录成功,拿到token
历尽波折,终于成功登录并拿到了token: - (LoginResultDto *)login:(NSString *)userName andPassword:(NSString *)passwor ...
- xcrun: error: active developer path ("/XX") does not exist
MAC OS 10.9下执行命令 svn --version 报出如下错误: xcrun: error: active developer path ("/Users/username/Do ...
- [Liferay6.2]Liferay入门级portlet开发示例
什么是Portlet 来自百度百科(http://baike.baidu.com/view/58961.htm)的定义如下: portlet是基于java的web组件,处理request并产生动态内容 ...
- Comet:基于 HTTP 长连接的“服务器推”技术解析
原文链接:http://www.cnblogs.com/deepleo/p/Comet.html 一.背景介绍 传统web请求,是显式的向服务器发送http Request,拿到Response后显示 ...
- Quartz.NET配置
概述 Quartz.NET 在开源任务调度框架中的翘首,它提供了强大任务调度机制,难能可贵的是它同时保持了使用的简单性.Quartz 允许开发人员灵活地定义触发器的调度时间表,并可以对触发器和任务进行 ...
- 【转】Kylin的cube模型
转自:http://www.cnblogs.com/en-heng/p/5239311.html 1. 数据仓库的相关概念 OLAP 大部分数据库系统的主要任务是执行联机事务处理和查询处理,这种处理被 ...
- LoadRunner编程之跳出迭代【exit(-1)和return 0】
只运行了一次迭代,就结束了. LR脚本实践:关于lr中exit(-1)和return 0的区别 exit(-1):从当前action里面exit(-1)所在行,当前迭代里面直接退出来,终止运行: ...
- 计数排序-java
今天看了一本书,书里有道题,题目很常见,排序,明了点说: 需求:输入:最多有n个正整数,每个数都小于n, n为107 ,没有重复的整数 输出:按升序排列 思路:假设有一组集合 {1,3,5,6,11, ...