维护p-j的前缀和sum[i],那么一段l~r合法的充要条件是sum[l]<=sum[l~r],sum[r]>=sum[l~r],即中间的所有sum都>=sum[l],<=sum[r]
如果枚举了右端点r,i为r左边第一个i满足sum[i]>sum[r] ,令L=i+1,问题变成找L~r的sum最小值
可以rmq,用并查集离线做rmq可以O(n),具体来说,维护每个位置i~r的rmq,那么1~r到r的rmq一定是若干个不降的段,并查集把每一段并在一起,询问就是问L所在的并查集

code:

#include<set>
#include<map>
#include<deque>
#include<queue>
#include<stack>
#include<cmath>
#include<ctime>
#include<bitset>
#include<string>
#include<vector>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<climits>
#include<complex>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;inline void up(int &x,const int &y){if(x<y)x=y;}
const int maxn = 1100000;int n;
char str[maxn];
int sum[maxn];int fa[maxn];
int findfa(const int x){return fa[x]==x?x:fa[x]=findfa(fa[x]);}int t[maxn],tp;
int lt[maxn],lp;int re;int main()
{scanf("%d",&n);scanf("%s",str);t[tp=1]=0,lt[lp=1]=0;for(int i=1;i<=n;i++){fa[i]=i;sum[i]=sum[i-1]+(str[i-1]=='p'?1:-1);while(tp&&sum[t[tp]]>sum[i]) fa[findfa(t[tp--])]=i;t[++tp]=i;while(lp&&sum[lt[lp]]<=sum[i]) lp--;int li=lt[lp]+1; if(li==1) li=0;lt[++lp]=i;up(re,i-findfa(li));}printf("%d\n",re);return 0;
}

BZOJ3521: [Poi2014]Salad Bar相关推荐

  1. POI2014 Salad Bar

    Salad Bar POI2014 题意 1.有一个长度为n的字符串,每一位只会是p或j. 2.找到一个子串S,使得不管是从左往右还是从右往左取,都保证每时每刻已取出的p的个数不小于j的个数. 3.求 ...

  2. [POI2014]Salad Bar

    题目大意: 一个长度为$n(n\leq10^6)$的字符串,每一位只会是$p$或$j$.你需要取出一个子串$S$(从左到右或从右到左一个一个取出),使得不管是从左往右还是从右往左取,都保证每时每刻已取 ...

  3. bzoj 3521: [Poi2014]Salad Bar

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3521 POI的题果然都有一些很精妙的O(n)O(n)O(n)做法 带log的比较简单,这里就 ...

  4. P3564 [POI2014]BAR-Salad Bar(ST表 + 二分)

    P3564 [POI2014]BAR-Salad Bar 给定一个长度为nnn的数组,里面元素只有111跟−1-1−1,问选出一个长度为lenlenlen的区间使得,这个区间的前缀和时刻大于零,后缀和 ...

  5. 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar

    t老师的做法好神-- 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...

  6. 【LOJ】#2430. 「POI2014」沙拉餐厅 Salad Bar

    题解 波兰人的j是苹果,p是橘子 还真是跟中国过不去啊= =写的时候很难受 我们先求出每个点作为起点,能延伸到的最大长度,这个可以处理成前缀和,查询一下区间最小值是不是小于0,用st表实现,如果区间最 ...

  7. POI2014Salad Bar

    POI2014 Salad Bar 这道题的大意就是给你一个字符串,里面只含有p和j,求一个最长的子串,使得从左边开始,p的个数一直比j多,从右边开始也一样. 这道题的话,一开始想歪了,就先对每个字符 ...

  8. POI 2014 切题记

    POI 2014 Salad Bar Description: 有一个长度为nnn的字符串,每一位只会是ppp或jjj.你需要取出一个子串SSS(从左到右或从右到左一个一个取出),使得不管是从左往右还 ...

  9. 8000 sentences of oral English(four)

    第四章 表现感情的短句 (16)高兴时 ●欣喜 How's your newhome? --I'm happy. 我很高兴!我很幸福! I'm ecstatic. 狂喜 I'm thrilled. 我 ...

最新文章

  1. 如果要存 IP 地址,用什么数据类型比较好?大部人都会答错!
  2. 写给对 ”游戏开发” 感兴趣的朋友们
  3. ogre3D学习基础14 -- 雾化效果与天空面,天空盒,天空穹
  4. windows server 2008R2下的mysql主从同步配置
  5. python学习高级篇(part9)--对象的引用计数
  6. 大数据是如何基于 Flink 进行实时计算的?
  7. Androidstudio抽取成员变量快捷键 快捷键大全 自定义setting文件
  8. python怎么爬取知乎回答并制作词云_爬虫|爬取微博动态
  9. linux准备环境,组建自己的Linux-01准备环境
  10. Java 设计模式 Factory Method 工厂方法 模式
  11. 一个函数中写多少行代码比较合适呢?
  12. 微软商店下载的python 的 pip 不能修改 config 的解决方法
  13. 细分领域:偏门的色流玩法+简单的色流变现套路
  14. java 向量 内积_【vector应用】计算两个向量的内积
  15. 可能是全网最全的解决无法创建视频捕捉过滤器问题?
  16. VoIP技术应用中存在的问题的分析研究
  17. CF632E Thief in a Shop 题解
  18. 夺命雷公狗—玩转SEO---52---浅谈人工智能在SEO中的应用之机器学习,内链布局篇...
  19. 防火墙一个系统加固的例子
  20. 三层架构-UI层 显示数据

热门文章

  1. 28BYJ-48步进电机介绍
  2. 《HCY致血管病变机制的研究进展》阅读笔记
  3. vue项目中使用ckplayer.js封装视频播放组件
  4. hdp 集成kylin_Flash作为UI:与HDP应用程序集成
  5. 开发掌握什么技术才不会被淘汰
  6. C++11之后的decltype类型指示符
  7. php+mysql一个简单的图书管理系统设计思路
  8. iphone4s改装 linux,iPhone4S降级教程(支持iOS5.1.1)可实现完美越狱
  9. 充电管理芯片中的一些特性说明
  10. equal与==的区别