LOJ2430:[POI2014]沙拉餐厅Salad Bar——题解
是的我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——题解的更多相关文章
- 【思维题 单调栈】loj#2430. 「POI2014」沙拉餐厅 Salad Bar
t老师的做法好神…… 题目描述 桌面上有 n 个水果,分别是苹果和橘子.Bytea需要从水果中选择连续的一个区间,并从左到右或从右到左拿水果,且过程中橘子的数量必须始终不小于苹果的数量.求最长的区间大 ...
- 【LOJ】#2430. 「POI2014」沙拉餐厅 Salad Bar
题解 波兰人的j是苹果,p是橘子 还真是跟中国过不去啊= =写的时候很难受 我们先求出每个点作为起点,能延伸到的最大长度,这个可以处理成前缀和,查询一下区间最小值是不是小于0,用st表实现,如果区间最 ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
- 【BZOJ2186】沙拉公主的困惑(数论)
[BZOJ2186]沙拉公主的困惑(数论) 题面 BZOJ 题解 考虑答案是啥 先假设\(n=m\) 现在求的就是\(\varphi(m!)\) 但是现在\(n!\)是\(m!\)的若干倍 我们知道 ...
- [SDOI 2008]沙拉公主的困惑
Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现 ...
- CDOJ 1401 谭爷的黑暗沙拉 数学
谭爷的黑暗沙拉 题目连接: http://mozhu.today/#/problem/show/1401 Description 谭爷有\(n\)种不同种类的食材(水果&蔬菜),他想做出一份总 ...
- 【bzoj2186】[Sdoi2008]沙拉公主的困惑
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 3303 Solved: 1129[Submit][S ...
- 【BZOJ2186】[Sdoi2008]沙拉公主的困惑 线性筛素数
[BZOJ2186][Sdoi2008]沙拉公主的困惑 Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M! ...
- P2155 [SDOI2008]沙拉公主的困惑
\(\color{#0066ff}{ 题目描述 }\) 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大 ...
随机推荐
- autoreleasepool 自动释放池的理解
常见的面试题:以下代码存在什么样的问题?应该如何改进? for (int i = 0; i < 100000; i++) { NSString *str = @"abc"; ...
- LDPC译码算法代码概述
程序说明 V0.0 2015/1/24 LDPC译码算法代码概述 概述 本文介绍了包括LDPC_Simulation.m, ldpcdecoderbp1.m,ldpcdecoderminsum ...
- Linux中新增硬盘的分区,格式化与挂载
Linux中新增硬盘的分区,格式化与挂载 本篇教程内容为怎样对Linux新增硬盘进行挂载,所以如果有准备新增硬盘但是有各种问题的,请参看本篇教程. 我们先说说什么是挂载? 我们知道Linux中的所有设 ...
- vue Map 渲染DOM
遍历对象(map),以键值对k:v的形式渲染DOM (1)DOM (2)数据模板
- Unity利用Share SDK实现QQ、微信及微博第三方登录及定制内容分享(附代码)
最近因为公司的项目需要添加一些实用性的功能,需要添加第三方登录及分享,采用的是Mob的SDK,可以先到其官网下载对应的SDK 点击这里,为了方便后期进行数据统计和分析,所以可以先添加一个应用,添加成功 ...
- Javascript深入__proto__和prototype的区别和联系
有一个一个装逼的同事,写了一段代码 function a(){} a.__proto__.__proto__.__proto__ 然后问我,下面这个玩意a.__proto__.__proto__.__ ...
- leetcode28_C++实现strStr()函数
实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始).如果不存在,则返 ...
- HTML/CSS的基本使用
本篇博客主要介绍一下HTML/CSS的基本使用,关于它们的介绍便不在赘述,读者可自行google或百度. 一.HTML 先来简单介绍一下HTML标签: HTML 标签是由尖括号包围的关键词,比如 &l ...
- Wampserver 修改根目录
wampserver 默认根目录在 www 文件夹下 修改根目录方法如下: 1. 在打算存放项目或代码的位置新建文件夹(我建在了C:/MyProject) 2. 打开 httpd.conf 文件(该文 ...
- 兰亭集势收购美国社交购物网站Ador,收购的是人才
1 月 6 日消息,外贸电商公司兰亭集势(LightInTheBox)今日宣布,已经完成对美国社交电商网站 Ador 公司的收购.Ador 公司总部位于西雅图.这项资产收购通过现金完成,但未披露交易金 ...