题意

\(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\)即可。

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. inline int getint() {
  4. int x=0, c=getchar();
  5. for(; c<48||c>57; c=getchar());
  6. for(; c>47&&c<58; x=x*10+c-48, c=getchar());
  7. return x;
  8. }
  9. const int N=1000005;
  10. typedef long long ll;
  11. int a[N], s[N];
  12. ll b[N];
  13. int main() {
  14. int n=getint(), m=getint();
  15. for(int i=1; i<=n; ++i) {
  16. a[i]=getint();
  17. }
  18. for(int t=1; t<=m; ++t) {
  19. int k=getint(), *top=s;
  20. *++top=0;
  21. for(int i=1; i<=n; ++i) {
  22. b[i]=a[i]-k+b[i-1];
  23. if(b[*top]>b[i]) {
  24. *++top=i;
  25. }
  26. }
  27. int ans=0;
  28. for(int i=n; i; --i) {
  29. for(; top!=s && b[*top]<=b[i]; --top);
  30. ans=max(ans, i-*(top+1));
  31. }
  32. printf("%d%c", ans, " \n"[t==m]);
  33. }
  34. return 0;
  35. }

【BZOJ】2086: [Poi2010]Blocks的更多相关文章

  1. 【BZOJ】2084: [Poi2010]Antisymmetry

    http://www.lydsy.com/JudgeOnline/problem.php?id=2084 题意:一个01串,求满足字符串0和1取反后,再将整个串反过来和原串一样的子串数目.(n< ...

  2. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  3. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  4. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  5. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  6. 【BZOJ】1002:轮状病毒(基尔霍夫矩阵【附公式推导】或打表)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下图 ...

  7. 【BZOJ】【3083】遥远的国度

    树链剖分/dfs序 其实过了[BZOJ][4034][HAOI2015]T2以后就好搞了…… 链修改+子树查询+换根 其实静态树的换根直接树链剖分就可以搞了…… 因为其实只有一样变了:子树 如果roo ...

  8. 【BZOJ】【2434】【NOI2011】阿狸的打字机

    AC自动机+DFS序+BIT 好题啊……orz PoPoQQQ 大爷 一道相似的题目:[BZOJ][3172][TJOI2013]单词 那道题也是在fail树上数有多少个点,只不过这题是在x的fail ...

  9. 【BZOJ】【2738】&【Tsinsen】【A1333】矩阵乘法

    整体二分+树状数组 过了[BZOJ][2527][POI2011]Meteors以后这题就没那么难啦~ 关键是[从小到大]依次插入数字,然后整体二分每个查询的第k大是在第几次插入中被插入的……嗯大概就 ...

随机推荐

  1. 微信token验证失败的解决方法

    一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...

  2. ASP.NET Web Api 使用CacheCow和ETag缓存资源(转载)

    转载地址:http://www.cnblogs.com/fzrain/p/3618887.html 前言 本文将使用一个开源框架CacheCow来实现针对Http请求资源缓存,本文主要介绍服务器端的缓 ...

  3. eclipse使用tips-Toggle Mark Occurrences 颜色更改

    Toggle Mark Occurrences这个功能非常好用,能把选中的方法/变量在本类中全部出现的地方高亮显示,是一个非常实用的功能.但是默认颜色是灰色,非常毁眼.可以通过下面的设置更改为自己喜欢 ...

  4. ShooterGame 学习笔记1 PlayerPawn的两个Mesh的可见性

    GameMode Override 为 ShooterGame_TeamDeathMatch GameMode中设置的Default Pawn Class 为 PlayerPawn , PlayerP ...

  5. 对服务器的ftp端口进行修改

    对服务器的ftp端口进行了修改,把21端口改了,比如221端口,就这样用221连接的时候,连接登录成功,但打不开目录,为何,总结如下: 1.完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端 ...

  6. android 入门-android Studio git配置

    以后在整理

  7. android 入门-生命周期 activity

    生命周期 activity http://blog.csdn.net/android_tutor/article/details/5772285 http://www.cnblogs.com/John ...

  8. linux下搭建属于自己的博客(WordPress安装)

    转自:http://www.cnblogs.com/xiaofengkang/archive/2011/11/16/2251608.html WordPress简介 WordPress 是一种使用 P ...

  9. java + jni + mingw实例开发(基于命令行窗口模式)

    java+ jni + mingw 参考网址: http://wenku.baidu.com/link?url=9aQ88d2ieO7IgKLlNhJi5d3mb3xwzbezLPzSIX3ixz4_ ...

  10. phpstudy配置ssl

    https://yunpan.cn/cPEyzVycbkiE3 (提取码:03aa) 1.重写规则:http://www.cnphp.info/htaccess-rewrite.html 2.相关文档 ...