CodeForces - 1263E(线段树维护前缀和最值)
题意
https://vjudge.net/problem/CodeForces-1263E
您要设计一个只有一行的打字机,这一行的长度是无限大,一开始可以认为每个字符都是空。您的打字机有一个光标只指向一个字符,一开始指向最左侧的字符。
使用者有三种操作:
L 将光标向左移一格(当光标已经在最左侧时,忽略这次操作)
R 将光标向右移一格
一个小写字符或者'(',')' 将当前字符替换为给定字符
您需要在每次操作后,判断这一行是否是合法括号序列(例如 (ahakioi) 就是合法的,(ige))(tscore 就是非法的),不是输出 -1,否则输出最多嵌套数(例如 ()(())()() 的最多嵌套数是 2,(()(()())())(()) 的最多嵌套数是 3)。
思路
看上去是个大模拟,实则是个线段树的技巧题。
用一个pos记录光标的位置。
记'('为1,')'为-1,其他字符为0,这样如果有某个前缀和<0(只用判断前缀和最小值<0即可),那么就不合法,或者所有加起来不等于0,也不合法。
单点更新,维护区间和sum,前缀和最小值mn,前缀和最大值mx。区间前缀和最小值和左右子树有关,比较左子树的前缀和最小值、右子树的前缀和最小值+左子树的区间和,用小的那个更新mn[rt],前缀和最大值同理。
那么在合法的情况下,前缀和的最大值即为最多嵌套数。
代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=1e6+5;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int sum[N<<2],mn[N<<2],mx[N<<2],n;
void pushUp(int rt)
{
sum[rt]=sum[rt<<1]+sum[rt<<1|1];
mn[rt]=min(mn[rt<<1],mn[rt<<1|1]+sum[rt<<1]);
mx[rt]=max(mx[rt<<1],mx[rt<<1|1]+sum[rt<<1]);
}
void update(int L,int C,int l,int r,int rt)
{
if(l==r)
{
sum[rt]=mn[rt]=mx[rt]=C;
return;
}
int m=(l+r)>>1;
if(L <= m) update(L,C,l,m,rt<<1);
else update(L,C,m+1,r,rt<<1|1);
pushUp(rt);
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n;
string s;
cin>>s;
int pos=1,r=1,ans=0;
for(int i=0; i<n; i++)
{
char c=s[i];
if(c=='R') pos++;
else if(c=='L')
{
if(pos>1) pos--;
}
else
{
if(c=='(')
update(pos,1,1,n,1);
else if(c==')')
update(pos,-1,1,n,1);
else
update(pos,0,1,n,1);
}
if(sum[1]!=0||mn[1]<0)
{
cout<<-1<<" ";
}
else
cout<<mx[1]<<" ";
}
cout<<endl;
return 0;
}
CodeForces - 1263E(线段树维护前缀和最值)的更多相关文章
- FJUT3568 中二病也要敲代码(线段树维护区间连续最值)题解
题意:有一个环,有1~N编号,m次操作,将a位置的值改为b,问你这个环当前最小连续和多少(不能全取也不能不取) 思路:用线段树维护一个区间最值连续和.我们设出两个变量Lmin,Rmin,Mmin表示区 ...
- BZOJ.1036 [ZJOI2008]树的统计Count ( 点权树链剖分 线段树维护和与最值)
BZOJ.1036 [ZJOI2008]树的统计Count (树链剖分 线段树维护和与最值) 题意分析 (题目图片来自于 这里) 第一道树链剖分的题目,谈一下自己的理解. 树链剖分能解决的问题是,题目 ...
- CodeForces 343D 线段树维护dfs序
给定一棵树,初始时树为空 操作1,往某个结点注水,那么该结点的子树都注满了水 操作2,将某个结点的水放空,那么该结点的父亲的水也就放空了 操作3,询问某个点是否有水 我们将树进行dfs, 生成in[u ...
- Letters Removing CodeForces - 899F (线段树维护序列)
大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...
- cf580E. Kefa and Watch(线段树维护字符串hash)
题意 $n$个数的序列,$m + k$种操作 1.$l , r, k$把$l - r$赋值为$k$ 2.$l, r, d$询问$l - r$是否有长度为$d$的循环节 Sol 首先有个神仙结论:若询问 ...
- codeforces Good bye 2016 E 线段树维护dp区间合并
codeforces Good bye 2016 E 线段树维护dp区间合并 题目大意:给你一个字符串,范围为‘0’~'9',定义一个ugly的串,即串中的子串不能有2016,但是一定要有2017,问 ...
- Codeforces GYM 100114 D. Selection 线段树维护DP
D. Selection Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descriptio ...
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- Codeforces 834D The Bakery【dp+线段树维护+lazy】
D. The Bakery time limit per test:2.5 seconds memory limit per test:256 megabytes input:standard inp ...
随机推荐
- WebRTC Android版本编译
本文简单介绍如何在Ubuntu18.04 上,编译WebRTC Android版本. 安装工具 需要用到depot_tools工具来下载webrtc源码. 安装 depot_tools git 命令获 ...
- C#面向对象-多态
面向对象的三大特性(封装,继承,多态)大多少人都应该知道.前两个的话比较容易理解.本文主要说一下面向对象中的多态. 什么是多态?不同的对象对同一操作,产生不同的执行结果.这就是多态.那么多态又包含了: ...
- C# -- 使用缓冲区进行文件下载操作
C# -- 使用缓冲区进行文件下载操作 1. 为避免下载超大文件占用内存资源,文件下载使用缓冲区,一点一点读取文件资源. string str0 = @"ftp://localhost:21 ...
- 工厂模式-C#改良实现
参考了下网上的工厂模式实现,总的来说例子还是OK得,但是示例太单一了,因此我做了下优化的改良实现. namespace DP { public interface ICreditCard { stri ...
- laravel大量填充项目测试数据的正确方法
项目开发时,一般都会有到项目测试数据的准备操作,以前都是基于PHP代码自主编写sql语句,然后循环的插入到数据库中里面,当当我们接触过laravel数据库后,就可以很方便的完成项目的测试数据准备. 但 ...
- SQL实用技巧:如何判断一个值是否为数字的方法
检测是不是数字型的数据, 两种方法 1. ISNUMERIC ( expression ) 2. PATINDEX ( ‘%pattern%‘ , expression ) 1. ISNUMERIC ...
- Windows系统Git安装教程(详解Git安装过程)
Windows系统Git安装教程(详解Git安装过程) 今天更换电脑系统,需要重新安装Git,正好做个记录,希望对第一次使用的博友能有所帮助! 获取Git安装程序 到Git官网下载,网站地址: ...
- packstack-ironic
安装openstack Pike版本, 其它版本安装方法类似. centos7.6 packstack目前对NetworkManager 还不支持,我们修改下配置: systemctl disable ...
- 生成对抗性网络GAN
同VAE模型类似,GAN模型也包含了一对子模型.GAN的名字中包含一个对抗的概念,为了体现对抗这个概念,除了生成模型,其中还有另外一个模型帮助生成模型更好地学习观测数据的条件分布.这个模型可以称作判别 ...
- nginx基础(3)
目录 HTTP首部 1.通用首部 2.请求首部 2.1 必有首部 2.2 条件请求首部 2.3 安全相关首部 3.响应首部 3.1 必有首部 3.2 协商首部 3.3 安全相关首部 4.实体首部 4. ...