Editor
我们把“(”用1表示,“)”用-1表示,其余字母用0表示,这样形成的一个数组,我们求出它的前缀和
sum[],只有当\(sum[n]==0\)且\(min(sum[])==0\)中的时候,才表示括号正好匹配,且最大嵌套数为\(max(sum[])\)
对于一个数组来说,要实现多次单点查询、区间修改、区间求极值这三个功能的话,我们可以利用线段树来提高其效率。
算法的板子没事多敲敲,不然很容易生疏....
代码:
// Created by CAD on 2019/12/3.
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
#define lson (p<<1)
#define rson (p<<1|1)
using namespace std;
const int maxn=1e6+10;
struct node{
int maxx=0,minn=0;
int sum=0;
}d[maxn<<2];
int a[maxn],laz[maxn<<2];
void pushdown(int s,int t,int p)
{
int m=(s+t)>>1;
d[lson].sum+=laz[p]*(m-s+1),d[rson].sum+=laz[p]*(t-m);
d[lson].maxx+=laz[p],d[rson].maxx+=laz[p];
d[lson].minn+=laz[p],d[rson].minn+=laz[p];
laz[lson]+=laz[p],laz[rson]+=laz[p];
laz[p]=0;
}
void update(int l,int r,int c,int s,int t,int p)
{
if(l<=s&&t<=r)
{
d[p].sum+=(t-s+1)*c,laz[p]+=c;
d[p].minn+=c,d[p].maxx+=c;
return ;
}
int m=(s+t)>>1;
if(laz[p]) pushdown(s,t,p);
if(l<=m) update(l,r,c,s,m,lson);
if(r>m) update(l,r,c,m+1,t,rson);
d[p].maxx=max(d[lson].maxx,d[rson].maxx);
d[p].minn=min(d[lson].minn,d[rson].minn);
d[p].sum=d[lson].sum+d[rson].sum;
}
int que_min(int l,int r,int s,int t,int p)
{
if(l<=s&&t<=r) return d[p].minn;
int m=(s+t)>>1;
if(laz[p]) pushdown(s,t,p);
int minn=inf;
if(l<=m) minn=min(que_min(l,r,s,m,lson),minn);
if(r>m) minn=min(que_min(l,r,m+1,t,rson),minn);
return minn;
}
int que_max(int l,int r,int s,int t,int p)
{
if(l<=s&&t<=r) return d[p].maxx;
int m=(s+t)>>1;
if(laz[p]) pushdown(s,t,p);
int maxx=0;
if(l<=m) maxx=max(que_max(l, r, s, m, lson), maxx);
if(r>m) maxx=max(que_max(l, r, m+1, t, rson), maxx);
return maxx;
}
int getsum(int l,int r,int s,int t,int p)
{
if(l<=s&&t<=r) return d[p].sum;
int m=(s+t)>>1;
if(laz[p]) pushdown(s,t,p);
int sum=0;
if(l<=m) sum+=getsum(l,r,s,m,p<<1);
if(r>m) sum+=getsum(l,r,m+1,t,p<<1|1);
return sum;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n; cin>>n;
string s; cin>>s;
int loc=1;
for(auto i:s)
{
if(i=='L') loc=max(1,loc-1);
else if(i=='R') loc++;
else {
int k=a[loc];
if(i=='(') a[loc]=1;
else if(i==')') a[loc]=-1;
else a[loc]=0;
update(loc,n,-k+a[loc],1,n,1);
}
if(que_min(1,n,1,n,1)!=0||getsum(n,n,1,n,1)!=0) cout<<-1<<" ";
else cout<<que_max(1,n,1,n,1)<<" ";
}
cout<<endl;
return 0;
}
Editor的更多相关文章
- [bzoj1269][AHOI2006文本编辑器editor] (splay模版题 or pb_ds [rope]大法)
Description 这些日子,可可不和卡卡一起玩了,原来可可正废寝忘食的想做一个简单而高效的文本编辑器.你能帮助他吗?为了明确任务目标,可可对“文本编辑器”做了一个抽象的定义: 文本:由0个或 ...
- Bzoj1269 [AHOI2006]文本编辑器editor
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3678 Solved: 1380 Description 这些日子,可可不和卡卡一起玩了,原来可可正 ...
- Unity3D Editor 扩展
官方教程:链接 EditorLayout API:链接 Handles API:链接 1.首先来个Inspector面板Editor的实现 要实现一个组件在Inspector中的Editor功能,首先 ...
- 推荐eclipse插件Properties Editor
需求:一般我们在做"国际化"功能时,我们需要properties中文表示方式用unicode表示.eclipse默认properties文件编辑器不方便查看,需要我们查看常常查找u ...
- Delphi Code Editor 之 编辑器选项
Delphi Code Editor 之 编辑器选项 可从Code Editor的右键菜单中选择“Properties”菜单项来查看编辑器选项.也可以从主菜单[Tools | Editor Optio ...
- SharedPreferences.Editor 的apply()与commit()方法的区别
commit()的文档 官方文档如下: Commit your preferences changes back from this Editor to the SharedPreferences o ...
- Easyui datagrid editor为combobox时指定数据源
当在datagrid行内部应用添加编辑操作时,引入combobox是非常方便的操作,我在引入combobox时对数据源这快做个总结,在做demo的过程中遇到个问题,就是当你选择了下拉框的值后点击保存, ...
- Microsoft Visual Studio 2008 未能正确加载包“Visual Web Developer HTML Source Editor Package” | “Visual Studio HTM Editor Package”
在安装Microsoft Visual Studio 2008 后,如果Visual Studio 2008的语言版本与系统不一致时,比如:在Windows 7 English System 安装Vi ...
- Devexpress WPF Theme Editor 02
Devexpress WPF Theme Editor 01 对于上次我们生成的主题 开始添加到我们的项目中. 运行Visual Studio和打开一个WPF解决方案,你想申请的主题. 添加的主题集会 ...
- easyui datagrid 动态操作editor 的方法
easyui本身是不提供这么细节的功能的,需要我们自己拓展下: 在easyui.min.js中扩展: $.extend($.fn.datagrid.methods, { addEditor : fun ...
随机推荐
- Java数据结构Vetor
Java数据结构Vector /** * <html> * <body> * <P> Copyright JasonInternational</p> ...
- JDBC 学习复习8 C3P0数据源使用
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Spring等. c3p0与dbcp区别 dbcp ...
- 什么是实体关系图(ERD)? 转
https://www.visual-paradigm.com/cn/guide/data-modeling/what-is-entity-relationship-diagram/#erd-data ...
- IDEA安装及默认配置习惯配置(一)
最新新转战IDEA,每次安装完需要做一些操作习惯的设置,在这里记录一下,下次安装可以快速上手用. 第一步,JAVA安装 JDK官方下载地址:https://www.oracle.com 下载JDK时根 ...
- laravel中引入composer安装在vendor中的第三方组件
一.安装第三方组件 方法一:使用命令行安装第三方(已phpword为例): composer require phpoffce/phpword ^v0..* 方法二: 修改主项目composer.js ...
- CSS属性margin、padding的区别
原始状态 不设置margin和padding的状态 margin 设置外边距之后的状态 padding 设置内边距之后的状态 ,注意是撑开,外框高宽由300px变成450px. 说明:本文为原创作品, ...
- BeginInvoke异步线程
this.BeginInvoke(new Action(() => { dataGridView1.DataSource = BLLBillConsume.BllGetClearMarketLo ...
- 第三章、vue-项目前端 - vue配置 | axios配置 | cookies配置 | element-ui配置 | bootstrap配置
目录 vue项目创建 环境 创建项目 重构项目目录 文件修订:目录中非配置文件的多余文件可以移除 全局配置:全局样式.配置文件 axios前后台交互 cookies操作 element-ui页面组件框 ...
- (六)图数据neo4j之cypher(一)
1.Cypher概述 cypher是一种声明式的图数据库查询语言,能高效的查询和更新图数据库,是依赖于模式的.所谓模式(Patterns)是就是众多节点和关系的任意复杂想法. (1)节点语法 cyph ...
- docker alpine wkhtmltopdf
截止2019.08 wkhtmltopdf 还没有 alpine 的版本 如需使用 需要在 alpine 环境中编译 生成 wkhtmltopdf (使用 apk add wkhtmltopdf ...