https://loj.ac/problem/2430

是的我BZOJ又没卡过……懒得卡了。

参考:https://blog.csdn.net/zqh_wz/article/details/52887289

参考的$O(n)$预处理我反正没看懂……设$L[i]$为i向左能够取到的最远位置,$R[i]$同理。

则我们$O(nlogn)$就能求出来,就是前缀和维护一个st表区间最小值,这样二分答案只要check这个区间最小值+前面没有取到的贡献就行了。

判断的话实际转换成求$L,R$必须满足$L[R]<=L$ $R<=R[L]$

我们可以对R进行排序然后树状数组维护L,具体的做法可以看代码画个图,你就知道为啥对了。

#include<map>
#include<cmath>
#include<stack>
#include<queue>
#include<cstdio>
#include<cctype>
#include<vector>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=1e6+;
const int INF=1e9;
char s[N];
int n,a[N],tr[N];
int f[N][],lg[N],L[N],R[N];
inline int qpow(int a){return <<a;}
inline int qry(int l,int r){
int len=r-l+,k=lg[len],h=qpow(k);
return min(f[l][k],f[r-h+][k]);
}
void st(){
for(int j=;j<=lg[n];j++)
for(int i=;i<=n;i++){
if(i+qpow(j)->n)break;
f[i][j]=min(f[i][j-],f[i+qpow(j-)][j-]);
}
}
struct node{
int R,id;
bool operator <(const node &a)const{
return R<a.R;
}
}g[N];
inline int lowbit(int t){return t&-t;}
inline void add(int x,int y){
for(int i=x;i<=n;i+=lowbit(i))tr[i]=max(tr[i],y);
}
inline int query(int x){
int res=;
for(int i=x;i;i-=lowbit(i))res=max(res,tr[i]);
return res;
}
int main(){
scanf("%d%s",&n,s+);
for(int i=;i<=n;i++)
if(s[i]=='p')a[i]=a[i-]+;
else a[i]=a[i-]-;
for(int i=;i<=n;i++){
lg[i]=lg[i-];
if((<<lg[i]+)==i)lg[i]++;
f[i][]=a[i];
}
st();
for(int i=;i<=n;i++){
int l=i-,r=n;
while(l<r){
int mid=(l+r+)>>;
if(qry(i,mid)-a[i-]>=)l=mid;
else r=mid-;
}
g[i].R=l,g[i].id=i;
} for(int i=;i<=n;i++)
if(s[n-i+]=='p')a[i]=a[i-]+;
else a[i]=a[i-]-;
for(int i=;i<=n;i++)f[i][]=a[i];
st();
for(int i=;i<=n;i++){
int l=i-,r=n;
while(l<r){
int mid=(l+r+)>>;
if(qry(i,mid)-a[i-]>=)l=mid;
else r=mid-;
}
L[n-i+]=n-l+;
} sort(g+,g+n+);
int now=,ans=;
for(int i=;i<=n;i++){
while(now<=g[i].R){
add(L[now],now);now++;
}
int r=query(g[i].id);
ans=max(ans,r-g[i].id+);
}
printf("%d\n",ans);
return ;
}

LOJ2430:[POI2014]沙拉餐厅Salad Bar——题解的更多相关文章

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

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

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

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

  3. Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2560  Solved: 857[Submit][St ...

  4. 【BZOJ2186】沙拉公主的困惑(数论)

    [BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...

  5. [SDOI 2008]沙拉公主的困惑

    Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...

  6. CDOJ 1401 谭爷的黑暗沙拉 数学

    谭爷的黑暗沙拉 题目连接: http://mozhu.today/#/problem/show/1401 Description 谭爷有\(n\)种不同种类的食材(水果&蔬菜),他想做出一份总 ...

  7. 【bzoj2186】[Sdoi2008]沙拉公主的困惑

    2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3303  Solved: 1129[Submit][S ...

  8. 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数

    [BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...

  9. P2155 [SDOI2008]沙拉公主的困惑

    \(\color{#0066ff}{ 题目描述 }\) 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大 ...

随机推荐

  1. C# 合并多个结构相同的DataTable

    public DataTable GetAllDataTable(DataSet ds) { DataTable newDataTable = ds.Tables[0].Clone(); //创建新表 ...

  2. 用php实现简单的自制计算器

    存档: <!DOCTYPE html> <html> <head> <title>PHP实现计算器</title> </head> ...

  3. JS继承方法

    1.原型链: 每个构造函数都有一个原型对象,且有一个指针指向该原型对象(prototype),原型对象都包含一个指向构造函数的指针(constructor),而实例都包含一个指向原型对象的内部指针(p ...

  4. HTML5 + CSS3 实现地球绕太阳公转

    使用的是正面视角,主要是用 HTML5 + CSS3 来实现,JS只是用来画图. test.html: <!DOCTYPE html> <html> <head> ...

  5. RHCE6.0上午的考试一键完成

    #!/sbin/bash # #initial envirment #variable define IPADDR=192.168.0.12 NETMASK=255.255.255.0 HOSTNAM ...

  6. 基于C#的机器学习--颜色混合-自组织映射和弹性神经网络

    自组织映射和弹性神经网络 自组织映射(SOM),或者你们可能听说过的Kohonen映射,是自组织神经网络的基本类型之一.自组织的能力提供了对以前不可见的输入数据的适应性.它被理论化为最自然的学习方式之 ...

  7. Hands on Machine Learning with sklearn and TensorFlow —— 一个完整的机器学习项目(加州房地产)

    数据集地址:https://github.com/ageron/handson-ml/tree/master/datasets 先行知识准备:NumPy,Pandas,Matplotlib的模块使用 ...

  8. Gradle快速上手——从Maven到Gradle

    [本文写作于2018年7月5日] 本文适合于有一定Maven应用基础,想快速上手Gradle的读者. 背景 Maven.Gradle都是著名的依赖管理及自动构建工具.提到依赖管理与自动构建,其重要性在 ...

  9. kafka可靠性

    文章转载自: http://blog.csdn.net/u013256816/article/details/71091774

  10. Sorting a Three-Valued Sequence(三值排序)

    Description 排序是一种很频繁的计算任务.现在考虑最多只有三值的排序问题.一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌序的时候. 在这个任务中可能的值只有三种1,2和3.我们用交换的 ...