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!互质的钞票.房地产第一大 ...
随机推荐
- Q&As:1.cocos2d-html5如何获得鼠标划过事件
不喜欢按部就班学东西,感觉各种框架各种技术就应该是拿到手用的,这应该是导致我现在学了这么多却没一样精通的缘故吧. 发现自己喜欢在QQ群回答一些菜鸟的问题,就算自己不清楚也会乐意看代码帮助解决╮(╯_╰ ...
- javaweb(二十九)——EL表达式
一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...
- KRKR基础篇(二)
这里介绍一些krkr的语法规范,具体的命令含义及用法以后再叙述 一:kag语法及基本概念 KAG使用的剧本语言为KAG Script,文件扩展名为.ks 脚本内的文字除 注释, 命令 , 段落标 ...
- 使用Photon引擎进行unity网络游戏开发(四)——Photon引擎实现网络游戏逻辑
使用Photon引擎进行unity网络游戏开发(四)--Photon引擎实现网络游戏逻辑 Photon PUN Unity 网络游戏开发 网络游戏逻辑处理与MasterClient 网络游戏逻辑处理: ...
- oracle数据库之组函数
组函数也叫聚合函数,用来对一组值进行运算,并且可以返回单个值 常见的组函数: (1)count(*),count(列名) 统计行数:找到所有不为 null 的数据来统计行数 (2)avg(列名) ...
- CSS3在线实战
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频网站:https://www ...
- GitHub 的简单使用
GitHub 的简单使用 2016-01-28 16:32:481909浏览1评论 一.Git 版本控制器 commit:做一个版本:commit new file:添加到版本中,下边填的是项目的描述 ...
- Python Requests库入门——应用实例-百度、360搜索关键词提交
百度的关键词接口: http://www.baidu.com/s?wd=keyword 360的关键词接口: http://www.so.com/s?q=keyword keyword就是需要查找的关 ...
- Scrum立会报告+燃尽图(十月二十二日总第十三次)
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2246 项目地址:https://git.coding.net/zhang ...
- scrum立会报告+燃尽图(第二周第四次)
此作业要求参考: https://edu.cnblogs.com/campus/nenu/2018fall/homework/2249 一.小组介绍 组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶.公 ...