当前位置: 首页 > news >正文

SPOJ-BRCKTS (括号序列,线段树)

维护括号序列 Replace(i):

将第i个位置的括号反向。

Check:测试当前序列是否合法。

 

题解

    将左括号定为1,右括号定为-1,所以只需要满足前缀和序列没有负数即可,即最小值

    为正即可,第i个括号反向,就是该位置----n减2或者加2

 1 #include<cstring>
 2 #include<cmath>
 3 #include<iostream>
 4 #include<algorithm>
 5 #include<cstdio>
 6 
 7 #define N 30007
 8 using namespace std;
 9 
10 int n,q;
11 char s[N];
12 int a[N],tr[N*4],flag[N*4];
13 
14 void update(int p)
15 {
16     tr[p]=min(tr[p<<1],tr[p<<1|1]);
17 }
18 void downdate(int p)
19 {
20     if (flag[p]==0) return;
21     tr[p<<1]+=flag[p],tr[p<<1|1]+=flag[p];
22     flag[p<<1]+=flag[p],flag[p<<1|1]+=flag[p];
23     flag[p]=0;
24 }
25 void build(int p,int l,int r)
26 {
27     if (l==r)
28     {
29         tr[p]=a[l];flag[p]=0;
30         return;
31     }
32     
33     int mid=(l+r)>>1;
34     build(p<<1,l,mid),build(p<<1|1,mid+1,r);
35     update(p);flag[p]=0;
36 }
37 void change(int p,int l,int r,int x,int y,int z)
38 {
39     if (l==x&&r==y)
40     {
41         tr[p]=tr[p]+z;
42         flag[p]+=z;
43         return;
44     }
45     downdate(p);
46     int mid=(l+r)>>1;
47     if (y<=mid) change(p<<1,l,mid,x,y,z);
48     else if (x>mid) change(p<<1|1,mid+1,r,x,y,z);
49     else change(p<<1,l,mid,x,mid,z),
50         change(p<<1|1,mid+1,r,mid+1,y,z);
51     update(p);
52 }
53 int query(int p,int l,int r,int x,int y)
54 {
55     if (l==x&&r==y) return tr[p];
56     downdate(p);
57     int mid=(l+r)>>1;
58     if (y<=mid) return query(p<<1,l,mid,x,y);
59     else if (x>mid) return query(p<<1|1,mid+1,r,x,y);
60     else return min(query(p<<1,l,mid,x,mid),query(p<<1|1,mid+1,r,mid+1,r));
61     update(p);
62 }
63 int main()
64 {
65     int CASE=0;
66     while (~scanf("%d",&n))
67     {
68         printf("Test %d:\n",++CASE);
69         scanf("%s",s+1);
70         for(int i=1;i<=n;i++)
71             if (s[i]=='(') a[i]=1;
72             else a[i]=-1;
73         for (int i=1;i<=n;i++) a[i]=a[i-1]+a[i];    
74         build(1,1,n);
75         scanf("%d",&q);
76         for (int i=1;i<=q;i++)
77         {
78             int x;scanf("%d",&x);
79             if (x==0)
80             {
81                 if (query(1,1,n,n,n)==0&&tr[1]==0) printf("YES\n");
82                 else printf("NO\n");
83             }
84             else
85             {
86                 change(1,1,n,x,n,(s[x]=='(')?-2:2);
87                 if (s[x]=='(')s[x]=')';
88                 else s[x]='(';
89             }
90         }
91     }
92 }

 

 

转载于:https://www.cnblogs.com/fengzhiyuan/p/8033374.html

相关文章:

  • 计算机七年级下册课件ppt课件ppt,新目标英语七年级下册
  • border-radius 原理分析
  • 计算机关闭系统默认共享,win10如何关闭默认共享_win10关闭默认共享的图文步骤...
  • 利用策略模式实现了同一接口的多个Servicel实现类,如何同时注入Controller
  • 交互设计起源于计算机的人机界面设计的例子,交互设计概述.ppt
  • 【eclipse】使用说明
  • 死神来了游戏一直正在连接服务器,Epic喜+1《死神来了》出现闪退问题 官方表示正在修复...
  • 用友服务器显示重启,用友重启远程服务器
  • C++ 之初体验
  • 测试服务器整体性能,测试服务器性能
  • Python中的str与unicode处理方法
  • 美图手机显示服务器异常,美图手机的云服务器
  • python 的日志logging模块学习
  • 未能启动apache服务器,教你apache服务无法启动一直失败怎么办
  • 2020年上半年教育舆情新闻热点事件案例分析报告合集
  • 【挥舞JS】JS实现继承,封装一个extends方法
  • egg(89)--egg之redis的发布和订阅
  • iOS小技巧之UIImagePickerController实现头像选择
  • Java 多线程编程之:notify 和 wait 用法
  • Java程序员幽默爆笑锦集
  • Lucene解析 - 基本概念
  • mysql 5.6 原生Online DDL解析
  • php ci框架整合银盛支付
  • SwizzleMethod 黑魔法
  • Travix是如何部署应用程序到Kubernetes上的
  • ViewService——一种保证客户端与服务端同步的方法
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 关于List、List?、ListObject的区别
  • 机器学习 vs. 深度学习
  • 理清楚Vue的结构
  • 马上搞懂 GeoJSON
  • 区块链共识机制优缺点对比都是什么
  • 源码安装memcached和php memcache扩展
  • 中文输入法与React文本输入框的问题与解决方案
  • 最简单的无缝轮播
  • 大数据全解:定义、价值及挑战
  • ​如何防止网络攻击?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • (03)光刻——半导体电路的绘制
  • (11)MATLAB PCA+SVM 人脸识别
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (9)STL算法之逆转旋转
  • (C语言)二分查找 超详细
  • (vue)页面文件上传获取:action地址
  • (二)丶RabbitMQ的六大核心
  • (十八)三元表达式和列表解析
  • (一)Neo4j下载安装以及初次使用
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)关于多人操作数据的处理策略
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .bashrc在哪里,alias妙用
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置