Пожалуйста, подпишитесь на официальный канал Codeforces в Telegram по ссылке https://t.me/codeforces_official. ×

 
 
 
 
Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
117713290 Дорешивание:
cnyzz
380C - 18 GNU C++11 Полное решение 171 мс 47952 КБ 2021-05-29 04:25:37 2021-05-29 04:25:38
→ Исходный код
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef double db;
const int N=1e6;
#define ls p*2
#define rs p*2+1
char st[N+5];
int q,n;
struct node {
	int l,r,ans;
} T[4*N+5];
node merge(node x,node y) {
	node ret;
	ret.ans=x.ans+y.ans+2*min(x.r,y.l);
	ret.l=x.l+y.l-min(x.r,y.l);
	ret.r=x.r+y.r-min(x.r,y.l);
	return ret;
}
void build(int p,int l,int r) {
	if(l==r) {
		if(st[l]=='(') T[p].r++;
		else T[p].l++;
		return;
	}
	int mid=(l+r)/2;
	build(ls,l,mid);build(rs,mid+1,r);
	T[p]=merge(T[ls],T[rs]);
}
node query(int p,int l,int r,int x,int y) {
	if(x<=l&&r<=y) return T[p];
	int mid=(l+r)/2;node a=(node){0,0,0},b=(node){0,0,0};
	if(x<=mid) a=query(ls,l,mid,x,y);
	if(y>mid) b=query(rs,mid+1,r,x,y);
	return merge(a,b);
}
void solve() {
	scanf("%s",st+1);n=strlen(st+1);
	build(1,1,n);
	scanf("%d",&q);
	while(q--) {
		int l,r;
		scanf("%d %d",&l,&r);
		printf("%d\n",query(1,1,n,l,r).ans);
	}
}
int main() {
	int t=1;scanf("%d",&t);
	while(t--) solve();
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования