E. Editor

题目链接:

https://codeforces.com/contest/1263/problem/E

题目大意:

输入一个字符串S1含有‘(’ , ‘)’ , ‘R’ , ‘L’ 以及其他字符。根据这个字符串,得到相应的字符串S2。起始idx=1即S2的初始坐标,然后从左到右读取S1,当遇到'L',idx减小1(当无法左移的情况下idx不减小),当遇到'R',idx增加1,当读取到其他字符时,将idx这个位置上的字符更新为读取到的新的字符。然后输出每一步得到的字符串S2最大的括号级数(例:(()())为2,((()))为3),如果不是一个左右括号完全匹配的字符串输出-1。

解题思路:

另(为1,)为-1,其他字符为0,构造一个线段树,维护区间和与前缀最小值、前缀最大值。可以知道,当前缀最小值小于0时代表不是一个括号完全匹配的字符串,当区间和不为0也表示这不是一个括号完全匹配的字符串。

代码:

 #include <bits/stdc++.h>
using namespace std;
const int N = 4e6;
string s;
int ans[N];
int mi[N],ma[N]; void update(int node,int start,int end,int p,int v){
if(start==end){
ans[node]=v;
ma[node]=v;
mi[node]=v;
return ;
}
int mid=(start+end)>>;
int left_node=*node+;
int right_node=*node+;
if(p<=mid){
update(left_node,start,mid,p,v);
}
else{
update(right_node,mid+,end,p,v);
}
ans[node]=ans[left_node]+ans[right_node];
ma[node]=max(ma[left_node],ans[left_node]+ma[right_node]);// 一个区间前缀最大值是左边区间中的最大值,与右边区间最大值加上左边区间和中的最大值
mi[node]=min(mi[left_node],ans[left_node]+mi[right_node]);// 一个区间前缀最小值是左边区间中的最小值,与右边区间最小值加上左边区间和中的最小值
} int main(){
int n,idx=;
cin>>n>>s;
for(int i=;i<n;i++){
if(s[i]=='L'){
if(idx>) idx--;
}
else if(s[i]=='R'){
idx++;
}
else if(s[i]=='('){
update(,,n,idx,);//更新此位置改为1
}
else if(s[i]==')'){
update(,,n,idx,-);//更新此位置改为-1
}
else{
update(,,n,idx,);//更新此位置改为0
}
if(mi[]>=&&ans[]==){//判断输出
cout<<ma[]<<" ";
}
else{
printf("-1 ");
}
}
cout<<endl; return ;
}

最新文章

  1. BFS
  2. memcache+magent的高可用
  3. 每天进步一点点——五分钟理解一致性哈希算法(consistent hashing)
  4. MVC4与JSON交互的知识总结
  5. Android九宫格界面实现点击每个格点击跳转界面
  6. [Solution] DI原理解析及Castle、Unity框架使用
  7. Unity3D 之UGUI 滑动条(Slider)
  8. CDT 错误 Cannot run program &quot;gcc&quot;
  9. 服务器表导入到本地数据库SQL语句
  10. Js用正则表达式验证字符串
  11. OpenCV基础篇之画图及RNG随机数对象
  12. 飘逸的python - 保持命名空间的整洁
  13. cheese desktop内容
  14. thinkphp 的两种建构模式 第一种一个单入口里面定义两个模块,前台和后台,函数控制模块必须function.php前台加载前台模块的汉书配置文件,后台加载后台模块的汉书配置文件,公共文件共用。第二种架构模式两个单入口文件,分别生成两个应用定义define。。。函数可以定义配置文件。。。。
  15. TestNG Suite 运行出现中文乱码如何解决
  16. Hadoop记录-Hadoop NameNode 高可用 (High Availability) 实现解析
  17. debug protractor
  18. oracle常用SQL——创建用户、表空间、授权(12C)
  19. VUE(现代库) VS jquery(传统库)
  20. 机器学习classification_report方法及precision精确率和recall召回率 说明

热门文章

  1. IDEA 快捷键 (长期更新)
  2. Maven快速安装配置
  3. numpy.random.randn()和numpy.random.rand()
  4. 【React 6/100】 React原理 | setState | JSX语法转换 | 组件更新机制
  5. CSS行内框(内联元素)
  6. Spring基础14——Bean的生命周期
  7. python2和3的一些区别,编码方式
  8. redis安装篇
  9. GUI学习之二十五——QFontDialog学习总结
  10. 开发板安装google浏览器