bzoj 1314: River过河 树套树+单调队列
Description
Input
Output
Sample Input
A
L
L
L
A
Sample Output
HINT
前三个人一条船,后两个人一条船
数据范围
30% 数据中1<=N<=1000
100%数据中1<=N<=250000,1<=M,K<=N
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int M=,N=<<,inf=0x3f3f3f3f;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
multiset<int> q[N];
int x,n,m,k,sum[M];
int qq[N],ql,qr=;
char str[M];
int s[N<<],f[M];
void modify(int x){
int v=q[x].size()?*q[x].begin():inf;
for(s[x+=N]=v,x>>=;x;x>>=) s[x]=min(s[x<<],s[x<<^]);
}
int query(int l,int r){
int mn=inf;
for(l+=N-,r+=N+;r-l!=;l>>=,r>>=){
if(~l&) mn=min(mn,s[l+]);
if(r&) mn=min(mn,s[r-]);
}
return mn;
}
int main(){
memset(s,0x3f,sizeof(s));
n=read(); m=read(); k=read();
sum[]=N/;
for(int i=;i<=n;i++){
scanf("%s",str+i);
sum[i]=sum[i-]+(str[i]=='A'?:-);
}
q[sum[]].insert();
modify(sum[]);
for(int i=,v,j=;i<=n;i++){
while(ql<=qr&&(qq[ql]<i-m||str[qq[ql]+]!=str[i])) ++ql;
while(ql<=qr&&f[qq[qr]]>f[i-]) --qr;
qq[++qr]=i-;
v=query(max(,sum[i]-k),min(N-,sum[i]+k));
f[i]=min(v,ql<=qr?f[qq[ql]]:inf)+;
if(i-m>=){
v=sum[i-m];
q[v].erase(q[v].find(f[i-m]));
modify(v);
}
v=sum[i];
q[v].insert(f[i]);
modify(v);
}
printf("%d\n",f[n]);
return ;
}
bzoj 1314: River过河 树套树+单调队列的更多相关文章
- bzoj 1314: River过河 优先队列
1314: River过河 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 26 Solved: 10[Submit][Status][Discuss ...
- [BZOJ 3489] A simple rmq problem 【可持久化树套树】
题目链接:BZOJ - 3489 题目分析 “因为是OJ上的题,就简单点好了.”——出题人 真的..好..简单... 首先,我们求出每个数的前一个与它相同的数的位置,即 prev[i] ,如果前面没有 ...
- bzoj 1901: Zju2112 Dynamic Rankings(树套树)
1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...
- BZOJ 3110: [Zjoi2013]K大数查询 [树套树]
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6050 Solved: 2007[Submit][Sta ...
- BZOJ 3110 k大数查询 & 树套树
题意: 有n个位置,每个位置可以看做一个集合,现在要求你实现一个数据结构支持以下功能: 1:在a-b的集合中插入一个数 2:询问a-b集合中所有元素的第k大. SOL: 调得火大! 李建说数据结构题能 ...
- BZOJ 3110 树套树 && 永久化标记
感觉树套树是个非常高深的数据结构.从来没写过 #include <iostream> #include <cstdio> #include <algorithm> ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 这题调了我相当长的时间,1wa1a,我是第一次写树套树,这个是树状数组套splay,在每个区间 ...
- 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 & 3236 [Ahoi2013] 作业 题解
[原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 978 Solved: 476 Descri ...
- 【Bzoj 3295】 动态逆序对(树套树|CDQ分治)
[题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状 ...
随机推荐
- 【yii2】rules规则的默认值
ExampleModel.php /** * {@inheritdoc} */ public function rules() { return [ ['updated_at','default',' ...
- python-含参函数
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- ''' #----------函数位置参数和关键字参数---------- def test(x,y): ...
- python学习之字符串转换
配置环境:python 3.6 python编辑器:pycharm 代码如下: #!/usr/bin/env python #-*- coding: utf-8 -*- def strCase() ...
- stark组件(7):增加分页功能
效果图: 分页部分代码: # 1.分页处理 all_count = self.model_class.objects.all().count() query_params = request.GET. ...
- C语言函数篇(二)函数参数基础设计
形参实现一种数据传入的接口 ,由 实参 拷贝给 形参. 拷贝!!!!!!!!!!! 例1: void func(int tmp){ //意图是实现传进来的参数 +1 tmp++; } int mian ...
- POJ:2976-Dropping tests(二分平均值)
Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15508 Accepted: 5418 Descr ...
- EF实体部分更新的问题
之前遇到只更新部分的问题:如前端修改用户信息(不修改密码),传实体到后台,这个实体是没有密码,这样一来要更新的话,得先去数据库通过传过来的实体的ID读取这条记录,然后将改动的部分填到查出来的记录中,再 ...
- java练习题——数组
上述代码可以顺利通过编译,并且输出一个“很奇怪”的结果:[Ljava.lang.Object;@2a139a55 为什么会出现这种情况? 直接输出object的对象,系统会输出地址,如果想要输出其中的 ...
- div嵌套img高度不相同
div中嵌套img,如果div里嵌套一个img元素且div的高度是由img的高度来撑开,那么div的高度总会比img的高度多3px. 可以明显看到div实际高度高出img高度3px.为了解决此问题,我 ...
- MyEclipse - 问题集
1. !MESSAGE Problems occurred when invoking code from plug-in: "org.eclipse.ui.workbench". ...