AtCoder F - Parenthesis Checking
原题链接:AtCoder F - Parenthesis Checking
一个全由\('('\)和\(')'\)构成的字符串,由以下两个操作:
1 l r交换字符串第\(l\)个和第\(r\)个字符。2 l r询问\(S[l-r]\)是否是一个合法序列。
很明显是一个线段树操作,这题蓝桥杯貌似有类似的,但是那道题貌似要用平衡树,也是操作之后判断括号序列是否合法,现在终于找到答案了,方法。
我们让\('('\)为\(1\),让\(')'\)为\(-1\),那么这样括号序列就成了只有\(1\)和\(-1\)的一个序列,然后我们用线段树维护一个区间和,那么一个合法括号序列的条件就是这段区间和等于\(0\),然后这个区间的前缀和得大于\(0\)。
区间和好维护,但是区间前缀和怎么维护,那我们就维护一个前缀最小值就\(ok\)了,对于\(pushup\),也就是\(min(左子树的最小值,左子树的和+右子树最小值)\),很巧妙,塞给队友队友直接秒了,然后我想了一天多。
#include <bits/stdc++.h>
using namespace std;
const int N = 2E5 + 10;
int W[N];
struct SegmentTree {
int l, r;
int sum, pre_min;
} tr[N * 4];
void push_up(int u) {
tr[u].sum = tr[u << 1].sum + tr[u << 1 | 1].sum;
tr[u].pre_min = min(tr[u << 1].pre_min, tr[u << 1].sum + tr[u << 1 | 1].pre_min);
}
void build(int u, int l, int r) {
if (l == r) {
tr[u] = { l, r, W[r], W[r] };
}
else {
int mid = l + r >> 1;
tr[u] = { l, r };
build(u << 1, l, mid), build(u << 1 | 1, mid + 1, r);
push_up(u);
}
}
void modify(int u, int x, int v) {
if (tr[u].l == tr[u].r) {
tr[u].sum = tr[u].pre_min = v;
}
else {
int mid = tr[u].l + tr[u].r >> 1;
if (x <= mid) modify(u << 1, x, v);
else modify(u << 1 | 1, x, v);
push_up(u);
}
}
pair<int, int> query(int u, int l, int r) {
if (l <= tr[u].l && tr[u].r <= r) {
return { tr[u].sum, tr[u].pre_min };
}
else {
int mid = tr[u].l + tr[u].r >> 1;
pair<int, int> left = { 0, 0 };
if (l <= mid) left = query(u << 1, l, r);
pair<int, int> right = { 0, 0 };
if (r > mid) right = query(u << 1 | 1, l, r);
//auto right = query(u << 1 | 1, l, r);
return { left.first + right.first, min(left.second, left.first + right.second) };
}
}
int main() {
int n, q;
string s;
cin >> n >> q;
cin >> s;
for (int i = 0; i < n; i++) W[i + 1] = (s[i] == '(' ? 1 : -1);
build(1, 1, n);
while (q--) {
int op, l, r;
cin >> op >> l >> r;
if (op == 1) {
swap(W[l], W[r]);
modify(1, l, W[l]), modify(1, r, W[r]);
}
else {
auto t = query(1, l, r);
if (t.first == 0 && t.second >= 0) puts("Yes");
else puts("No");
}
}
return 0;
}
AtCoder F - Parenthesis Checking的更多相关文章
- Atcoder F - LCS (DP-最长公共子序列,输出字符串)
F - LCS Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement You are gi ...
- 【atcoder F - Namori】**
F- Namori http://agc004.contest.atcoder.jp/tasks/agc004_f Time limit : 2sec / Memory limit : 256MB S ...
- Atcoder F - Mirrored(思维+搜索)
题目链接:http://arc075.contest.atcoder.jp/tasks/arc075_d 题意:求rev(N)=N+D的个数,rev表示取反.例如rev(123)=321 题解:具体看 ...
- AtCoder F - Exhausted?
传送门 sxy题解: //Achen #include<algorithm> #include<iostream> #include<cstring> #inclu ...
- Amazon Interview | Set 27
Amazon Interview | Set 27 Hi, I was recently interviewed for SDE1 position for Amazon and got select ...
- Linux LVM 简单操作
查看当前磁盘分区情况fdisk -l 磁盘分区fdisk /dev/sdb# 可能用到的Type :# 8e Linux LVM# fd Linux raid auto 创建PVpvcreate /d ...
- day07 - Python - 面向对象进阶
本节内容: 面向对象高级语法部分异常处理异常处理异常处理 经典类vs新式类 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 作业:开发一个支持多用户在线的FTP程序 面向对象高级语法部分 1 ...
- Educational Codeforces Round 22 补题 CF 813 A-F
A The Contest 直接粗暴贪心 略过 #include<bits/stdc++.h> using namespace std; int main() {//freopen(&qu ...
- elasticsearch7.x集群安装(含head、bigdesk、kibana插件)
网址:https://www.elastic.co 192.168.14.239 es-node1192.168.14.240 es-node2192.168.14.241 es-node3 ==== ...
- Module ngx_http_rewrite_module
http://nginx.org/en/docs/http/ngx_http_rewrite_module.html Directives break if return ...
随机推荐
- 注意!JAVA中的值传递
前言:今天在解决一个问题时,程序总是不能输出正确值,分析逻辑思路没问题后,发现原来是由于函数传递导致了这个情况. LeetCode 113 问题:给你二叉树的根节点root和一个整数目标和target ...
- Blazor前后端框架Known-V1.2.11
V1.2.11 Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行. Gitee: https://gitee.com/known/Known Git ...
- CentOS7更新OpenSSH
前言 整个过程不要断开ssh链接,如有必要可使用telnet远程操作. 系统版本:centos 7.9 OpenSSL版本:1.0.2k -> 1.1.1q OpenSSH版本:7.4p1 -& ...
- centos7安装influxdb2
前言 InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读.高性能写.高效存储与实时分析等,广泛应用于DevOps监控.IoT监控.实时分析等场景. 服务器 ...
- Java 设计模式实战系列—单例模式
本文首发公众号:小码A梦 单例模式是设计模式中最简单一个设计模式,该模式属于创建型模式,它提供了一种创建实例的最佳方式. 单例模式的定义也比较简单:一个类只能允许创建一个对象或者实例,那么这个类就是单 ...
- 2023年Vue开发中的8个最佳工具
前言 Vue.js,一款当今非常流行的基于JavaScript的开源框架,旨在构建动态的可交互应用. Vue.js以其直观的语法和灵活的架构而广受全球开发者的欢迎和赞誉.随着时间的推移,Vue不断进化 ...
- Solution -「CF 959E」Mahmoud and Ehab and the xor-MST
Description Link. 一完全图有 \(n\) 个节点 \(0,...,n-1\),其中边 \((i,j)\) 的权值为 \(i\oplus j\),其中 \(\oplus\) 为位异或操 ...
- 算法打卡|Day4 链表part02
Day4 链表part02 今日任务 ● 24. 两两交换链表中的节点 ● 19.删除链表的倒数第N个节点 ● 面试题 02.07. 链表相交 ● 142.环形链表II 目录 Day4 链表part0 ...
- RabbitMQ——RabbitMQ面试题
文章目录 为什么使用MQ?MQ的优点 消息队列有什么优缺点?RabbitMQ有什么优缺点? 你们公司生产环境用的是什么消息中间件? Kafka.ActiveMQ.RabbitMQ.RocketMQ 有 ...
- [最佳实践]配置sshd只允许sftp登录
sftp 是 Secure File Transfer Protocol 的缩写,即安全文件传送协议,可为传输文件提供一种安全的加密方法. sftp 为 SSH 的一部分,由于这种传输方式使用了加密/ ...