题意:给你一个括号序列,这个括号序列将确定一颗二叉树。有q次询问,每次询问输出这颗树的直径。

思路:https://blog.csdn.net/Huah_2018/article/details/89788074

代码:

#include <bits/stdc++.h>
#define ls (x << 1)
#define rs ((x << 1) | 1)
using namespace std;
const int maxn = 200010;
char s[maxn];
struct SegmentTree {
int mx, mi, lmx, rmx, sum, ans;
void init(int x) {
mx = x, mi = x, lmx = -x, rmx = -x, sum = x, ans = 0;
};
};
SegmentTree tr[maxn * 4];
void pushup(int x) {
int k = x;
tr[x].mx = max(tr[ls].mx, tr[rs].mx + tr[ls].sum);
tr[x].mi = min(tr[ls].mi, tr[rs].mi + tr[ls].sum);
tr[x].lmx = max(tr[ls].lmx, tr[rs].lmx - tr[ls].sum);
tr[x].lmx = max(tr[x].lmx, tr[ls].mx - 2 * (tr[rs].mi + tr[ls].sum));
tr[x].rmx = max(tr[ls].rmx, tr[rs].rmx - tr[ls].sum);
tr[x].rmx = max(tr[x].rmx, tr[rs].mx - 2 * tr[ls].mi + tr[ls].sum);
tr[x].sum = tr[ls].sum + tr[rs].sum;
tr[x].ans = max(tr[ls].ans, tr[rs].ans);
tr[x].ans = max(tr[x].ans, max(tr[ls].lmx + tr[rs].mx + tr[ls].sum, tr[rs].rmx + tr[ls].mx - tr[ls].sum));
}
void build(int x, int l, int r) {
if(l == r) {
tr[x].init(s[l] == '(' ? 1 : -1);
return;
}
int mid = (l + r) >> 1;
build(ls, l, mid);
build(rs, mid + 1, r);
pushup(x);
}
void update(int x, int l, int r, int pos) {
if(l == r) {
tr[x].init(s[l] == '(' ? 1 : -1);
return;
}
int mid = (l + r) >> 1;
if(pos <= mid) update(ls, l, mid, pos);
else update(rs, mid + 1, r, pos);
pushup(x);
}
int main() {
int n, T;
scanf("%d%d", &n, &T);
n = 2 * n - 2;
int u, v;
scanf("%s",s + 1);
build(1, 1, n);
printf("%d\n", tr[1].ans);
while(T--) {
scanf("%d%d", &u, &v);
swap(s[u], s[v]);
update(1, 1, n, u);
update(1, 1, n, v);
printf("%d\n", tr[1].ans);
}
}

  

最新文章

  1. LINQ系列:LINQ to ADO.NET概述
  2. 表设置了自增后往里面插入不自增的id时的处理方法
  3. redis 数据结构一 之t_string
  4. CentOS下安装Mysql数据库
  5. Sphinx 全量索引加实时索引
  6. 如何有效使用Project(2)——进度计划的执行与监控
  7. codeforces C. Fixing Typos 解题报告
  8. cocos2d-x使用ant批量打包
  9. 《Data-Intensive Text Processing with mapReduce》读书笔记之一:前言
  10. Ajax调用返回json,xml数据类型(0517--pm)
  11. cf492D Vanya and Computer Game
  12. 注解配置的Spring MVC
  13. SQL中条件放在on后与where后的区别
  14. 网络营销行业十大看了就想吐的&ldquo;滥词&rdquo;
  15. stm32位操作详解
  16. bzoj 1076
  17. [ci]jenkins server启动,通过jnlp的方式启动slave(容器模式)
  18. 【JS】【4】字符串数字比较大小
  19. Python 3 学习笔记(3)
  20. [Robot Framework] Robot Framework用Execute Javascript对XPath表示的元素执行scrollIntoView操作

热门文章

  1. 如何从零搭建一个webpack+react+redux+react-redux的开发环境一入门
  2. setlocale - 设置当前的区域选项
  3. 关于Django路由层简单笔记
  4. 软件安装 RPM SRPM YUM
  5. Python3.5-20190506-廖老师-自我笔记函数
  6. 【leetcode】935. Knight Dialer
  7. boost库:多线程
  8. 80、tensorflow最佳实践样例程序
  9. java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】
  10. 使用密码登陆Amazon EC2