【BZOJ5083】普及

Description

有一个长度为n的字符串,每一位只会是p或j。你需要取出一个子串S(从左到右或从右到左一个一个取出),使得
不管是从左往右还是从右往左取,都保证每时每刻已取出的p的个数不小于j的个数。你需要最大化|S|。

Input

第一行一个整数n,接下来一个长度为n的只含有p,j的字符串
N<=10^6

Output

输出S的最大长度

Sample Input

6
jpjppj

Sample Output

4

题解:我们将区间和看成前缀相减和后缀相减,记前缀和为s1[i],后缀和为s2[i],那么区间[l,r]是合法的就等价于s1[r]>=s1[l-1...r-1],s2[l]>=s2[l+1...r+1]。我们可以用单调栈维护每个数左边第一个s1比它大的ls,和右边第一个s2比它大的rs。那么询问就变成了求最大的r-l,满足l>=ls[r]且r<=rs[l]。我们枚举l,然后用RMQ维护区间ls的最小值,然后二分查找即可。

Claris是怎么跑得那么快的啊~

#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int maxn=1000010;
int n,top,ans;
int ls[maxn],rs[maxn],v[maxn],s1[maxn],s2[maxn],st[maxn],mn[20][maxn],Log[maxn];
char str[maxn];
inline int query(int a,int b)
{
int k=Log[b-a+1];
return min(mn[k][a],mn[k][b-(1<<k)+1]);
}
int main()
{
scanf("%d%s",&n,str+1);
int i,j,l,r,mid;
for(i=1;i<=n;i++) s1[i]=s1[i-1]+(str[i]=='p'?1:-1);
for(i=n;i>=1;i--) s2[i]=s2[i+1]+(str[i]=='p'?1:-1);
for(st[top=1]=0,i=1;i<=n;i++)
{
while(top&&s1[st[top]]<=s1[i]) top--;
mn[0][i]=ls[i]=!top?1:(st[top]+2),st[++top]=i;
}
for(st[top=1]=n+1,i=n;i>=1;i--)
{
while(top&&s2[st[top]]<=s2[i]) top--;
rs[i]=!top?n:(st[top]-2),st[++top]=i;
}
for(i=2;i<=n;i++) Log[i]=Log[i>>1]+1;
for(j=1;(1<<j)<=n;j++) for(i=1;i+(1<<j)-1<=n;i++) mn[j][i]=min(mn[j-1][i],mn[j-1][i+(1<<(j-1))]);
for(i=1;i<=n;i++)
{
l=i-1,r=rs[i];
while(l<r)
{
mid=(l+r)>>1;
if(query(mid+1,r)<=i) l=mid+1;
else r=mid;
}
ans=max(ans,r-i+1);
}
printf("%d",ans);
return 0;
}

【BZOJ5083】普及 单调栈+二分+RMQ的更多相关文章

  1. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  2. bzoj 4709 [Jsoi2011]柠檬——单调栈二分处理决策单调性

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4709 题解:https://blog.csdn.net/neither_nor/articl ...

  3. BZOJ1012最大数 [JSOI2008] 单调栈+二分

    正解:单调栈+二分查找(or,线段树? 解题报告: 拿的洛谷的链接quq 今天尝试学习了下单调栈,然后就看到有个博客安利了这个经典例题?于是就去做了,感觉还是帮助了理解趴quqqqqq 这题,首先,一 ...

  4. 51NOD 1962 区间计数 单调栈+二分 / 线段树+扫描线

     区间计数   基准时间限制:1.5 秒 空间限制:262144 KB 分值: 80   两个数列 {An} , {Bn} ,请求出Ans, Ans定义如下: Ans:=Σni=1Σnj=i[max{ ...

  5. 【bzoj4237】稻草人 分治+单调栈+二分

    题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下条件: ...

  6. 洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找)

    洛谷P1823 [COI2007] Patrik 音乐会的等待(单调栈+二分查找) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1333275 这个题不是很 ...

  7. 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...

  8. 【洛谷P1823】音乐会的等待 单调栈+二分

    题目大意:给定一个长度为 N 的序列,定义两个数 \(a[i],a[j]\) 相互看得见,意味着 \(\forall k\in [i+1,j-1],a[k]\le a[i],a[k]\le a[j]\ ...

  9. spoj MINSUB 单调栈+二分

    题目链接:点击传送 MINSUB - Largest Submatrix no tags  You are given an matrix M (consisting of nonnegative i ...

随机推荐

  1. AngularJS 常用模块书写建议

    本文是依据 Angular Style Guide 对 Angular 常用模块书写建议的翻译和总结,仅供参考. IIFE 使用 立即执行函数表达式(Immediately Invoked Funct ...

  2. 利用ngModel相关属性及方法自定义表单验证指令

    这是一个只能输入偶数的验证指令

  3. MySQL是如何做到安全登陆

    首先Mysql的密码权限存储在mysql.user表中.我们不关注鉴权的部分,我们只关心身份认证,识别身份,后面的权限控制是很简单的事情.在mysql.user表中有个authentication_s ...

  4. python内置函数之vars()

    vars([object]) 返回__dict__属性的值.当不传入参数时,和locals()等效.当函数接收一个参数时,参数可以是模块.类.类实例,或者定义了__dict__属性的对象. >& ...

  5. [转]James Bach:测试人员的角色

    [转]James Bach:测试人员的角色 2015-05-13 以前,我是个开发人员.我不喜欢这个工作,无尽的压力让我疲惫.我几乎从未感觉到自己的工作做得足够好.我从未有过真正的休息.如果我没做好, ...

  6. jquery flexslider 轮播插件

    去官网下载最新的 https://www.woothemes.com/flexslider/ 引入 css 和 js api $(window).load(function() { $('.flexs ...

  7. windows下安装配置apacheserver

    注:一開始公布的时候 图片是复制粘贴的.所以公布完图片所有消失了...如今是补发图片. . .2016/04/25 1.进入apache官网  http://httpd.apache.org/ 这里我 ...

  8. 16C554在LINUX上的移植(AT91)

    16C554在LINUX上的移植(AT91) linux版本:3.14.17 AT91SAMa5d36   EINTA_0   ARM-IO5        PA14         14 EINTA ...

  9. Spider Studio 新版本 (20140109) - 修复浏览器对部分网页不支持的BUG

    SS对部分网页中引用的jquery.js有冲突, 会造成网页部分JS效果无法正常执行. 本次版本对其进行了修正, 优化了浏览器的脚本引用机制, 修正了这个BUG.

  10. 一、thinkphp

    # ThinkPHP核心文件介绍 ├─ThinkPHP.php 框架入口文件 ├─Common 框架公共文件 ├─Conf 框架配置文件 ├─Extend 框架扩展目录 ├─Lang 核心语言包目录 ...