CodeForces 380.C Sereja and Brackets
题意
一串括号序列,只由(和)组成,然后是m个提问,提问l和r区间内,最大的匹配匹配括号数。
思路
第一,贪心的思想,用最正常的方式去尽量匹配,详细点说就是,先找到所有的(),然后删除这些(),再找所有的()。用这种方式匹配出来的,就是最优的方案。
第二,如果我们把所有的'('当成+1, ')'当成-1, 然后画成函数,那么,我们可以通过函数的图像,来得到得到,这段区间的长度(r-l),这段区间的最小值(min),这段区间没用的')'的数量(f(l)-min),这段区间没用的'('的数量(f(r)-f(l)+(f(l)-min)) 然后就得到解了。
另外,区间查询最小值,用线段树就行。
本解 最重要的地方,在于通过函数图像得到解。最难得的就是如果通过函数图像得到解,唉,谁知道呢= =……
我的代码
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 1020000
#define lson(A) ((A)<<1)
#define rson(A) ((A)<<1|1) int top; char str[N];
int sum[N]; int tree[N<<]; void init(int root, int l, int r) {
if (l == r) {
tree[root] = sum[l];
return;
}
int mid = (l+r)/;
init(lson(root), l, mid);
init(rson(root), mid+, r);
tree[root] = min(tree[lson(root)], tree[rson(root)]);
} int query(int root, int rl, int rr, int ql, int qr) {
if (root == -) exit(-);
//printf("%d, %d %d %d %d\n", root, rl, rr, ql ,qr);
if ((rl == ql && rr == qr) || rl==rr) {
return tree[root];
}
int mid = (rl+rr)/;
if (mid < ql) return query(rson(root), mid+, rr, ql, qr);
if (qr <= mid) return query(lson(root), rl, mid, ql, qr);
else if (ql <= mid && mid+ <= qr)
return min( query(lson(root), rl, mid, ql, min(mid, qr))
,query(rson(root), mid+, rr, max(mid+, ql), qr));
else exit(-);
} int main() {
scanf("%s", str);
sum[] = ;
int i;
for (i = ; str[i]; i++) {
sum[i+] = sum[i] + (str[i] == '(' ? : - );
}
int len = i;
init(, , len); int m;
scanf("%d", &m);
while (m--) {
int l, r;
scanf("%d%d", &l, &r);
l--;
int minnum = query(, , len, l, r);
int skipClose = sum[l] - minnum;
int skipOpen = sum[r]-sum[l]+skipClose;
//printf("(%d, %d,%d)\n", minnum, skipClose, skipOpen);
printf("%d\n", r-l-skipClose-skipOpen);
}
return ;
}
CodeForces 380.C Sereja and Brackets的更多相关文章
- Codeforces Round #223 (Div. 2) E. Sereja and Brackets 线段树区间合并
题目链接:http://codeforces.com/contest/381/problem/E E. Sereja and Brackets time limit per test 1 secon ...
- Sereja and Brackets CodeForces - 380C (树状数组+离线)
Sereja and Brackets 题目链接: CodeForces - 380C Sereja has a bracket sequence s1, s2, ..., *s**n, or, in ...
- Sereja and Brackets CodeForces - 380C (线段树+分治思路)
Sereja and Brackets 题目链接: CodeForces - 380C Sereja has a bracket sequence s1, s2, ..., *s**n, or, in ...
- CF380C. Sereja and Brackets[线段树 区间合并]
C. Sereja and Brackets time limit per test 1 second memory limit per test 256 megabytes input standa ...
- codeforces 629C Famil Door and Brackets (dp + 枚举)
题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...
- CodeForces 380C Sereja and Brackets(扫描线+树状数组)
[题目链接] http://codeforces.com/problemset/problem/380/C [题目大意] 给出一个括号序列,求区间内左右括号匹配的个数. [题解] 我们发现对于每个右括 ...
- 【39.29%】【codeforces 552E】Vanya and Brackets
time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...
- Codeforces 380 简要题解
ABC见上一篇. 感觉这场比赛很有数学气息. D: 显然必须要贴着之前的人坐下. 首先考虑没有限制的方案数.就是2n - 1(我们把1固定,其他的都只有两种方案,放完后长度为n) 我们发现对于一个限制 ...
- Codeforces 314 E. Sereja and Squares
http://codeforces.com/contest/314/problem/E 题意: 原本有一个合法的括号序列 擦去了所有的右括号和部分左括号 问有多少种填括号的方式使他仍然是合法的括号序列 ...
随机推荐
- 设置mysql允许外部连接访问
错误信息: SQL Error (1130): Host ‘192.168.1.88’ is not allowed to connect to this MySQL server 说明所连接的用户帐 ...
- gcc——预处理(预编译),编译,汇编,链接
一,预编译 操作步骤:gcc -E hello.c -o hello.i 主要作用: 处理关于 “#” 的指令 [1]删除#define,展开所有宏定义.例#define portnumber 333 ...
- selenium2元素定位Xpath和cssSelector
Selenium2中元素有以下几种定位方法, 常用的有Id,xpath, cssSelector XPATH介绍: XPATH是一种选择器 XPATH在firefox中用firepath验证 XP ...
- LA 4094 WonderTeam 构造
题意: 一共有\(n\)支队伍参加比赛,每两支队伍比赛两场,主客场各一场. 胜场得\(3\)分,平局得1分,败场不得分. 一支得分为\(p\)的队伍的排名\(=\)分数大于\(p\)的队伍数\(+1\ ...
- Django基于Pycharm开发之一【创建django工程】
Django的工程结构,可以通过pycharm里面,选择创建django工程来直接创建,也可以通过命令行通过pip来安装. 一.通过命令行安装的步骤 Install Python. Install a ...
- 【JavaScript】关于 setInterval() 调用函数方法的一次实验
实验主题: setInterval() 方法是 JS 中比较常用的一个方法.setInterval() 方法可以按照指定的周期 ( 毫秒 ) 来调用函数方法或计算表达式. setInterval() ...
- log4net配置分析
appender 附加器 RollingFileAppender 滚动文件appender MaxSizeRollBackups 最大尺寸回滚 ConversionPatter ...
- 读《MySql必知必会》笔记
MySql必知必会 2017-12-21 意义:记录个人不注意的,或不明确的,或不知道的细节方法技巧,此书250页 登陆: mysql -u root-p -h myserver -P 9999 SH ...
- Welcome-to-Swift-10属性 (Properties)
属性将值跟特定的类.结构或枚举关联.存储属性存储常量或变量作为实例的一部分,计算属性计算(而不是存储)一个值.计算属性可以用于类.结构体和枚举里,存储属性只能用于类和结构体. 存储属性和计算属性通常用 ...
- iOS学习笔记28-系统服务(一)短信和邮件
一.系统应用 在开发某些应用时,我们可能希望能够调用iOS系统内置的电话.短信.邮件.浏览器应用,或者直接调用安装的第三方应用,这个要怎么实现呢? 这里统一使用UIApplication的一个对象方法 ...