Основное
 
 
Отправитель Задача Язык Вердикт Время Память Отослано Протест.  
53591504 Дорешивание:
pupiI
1149C - 16 GNU C++11 Полное решение 187 мс 28396 КБ 2019-05-01 03:19:48 2019-05-01 03:19:48
→ Исходный код
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
il ll gi(){
	ll x=0,f=1;
	char ch=getchar();
	while(!isdigit(ch))f^=ch=='-',ch=getchar();
	while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
	return f?x:-x;
}
struct data{
	int prex,pren,sufx,sufn,pred,sufd,d,sum,ans;
	data(){}
	data(int a,int b,int c,int D,int f,int h,int j,int k,int l){prex=a,pren=b,sufx=c,sufn=D,pred=f,sufd=h,d=j,sum=k,ans=l;}
}seg[800010],leafl(1,0,1,0,1,1,1,1,1),leafr(0,-1,0,-1,1,1,1,-1,1);
il data operator+(const data&a,const data&b){
	data c;
	c.prex=std::max(a.prex,a.sum+b.prex);
	c.sufx=std::max(b.sufx,b.sum+a.sufx);
	c.pren=std::min(a.pren,a.sum+b.pren);
	c.sufn=std::min(b.sufn,b.sum+a.sufn);
	c.d=std::max(b.d-a.sum,a.d+b.sum);
	c.pred=std::max(a.pred,std::max(b.pred-a.sum,a.d+b.prex));
	c.sufd=std::max(b.sufd,std::max(b.sum+a.sufd,b.d-a.sufn));
	c.sum=a.sum+b.sum;
	c.ans=std::max(std::max(a.ans,b.ans),std::max(b.pred-a.sufn,a.sufd+b.prex));
	return c;
}
char brace[200010];
#define mid ((l+r)>>1)
il vd build(int x,int l,int r){
	if(l==r){seg[x]=brace[l]=='('?leafl:leafr;return;}
	build(x<<1,l,mid),build(x<<1|1,mid+1,r);
	seg[x]=seg[x<<1]+seg[x<<1|1];
}
il vd update(int x,int l,int r,const int&p){
	if(l==r){seg[x]=brace[l]=='('?leafl:leafr;return;}
	if(p<=mid)update(x<<1,l,mid,p);
	else update(x<<1|1,mid+1,r,p);
	seg[x]=seg[x<<1]+seg[x<<1|1];
}
int main(){
#ifndef ONLINE_JUDGE
	freopen("in.in","r",stdin);
	freopen("out.out","w",stdout);
#endif
	int n=gi()-1<<1,q=gi(),x,y;
	scanf("%s",brace+1);build(1,1,n);
	printf("%d\n",seg[1].ans);
	while(q--){
		x=gi(),y=gi(),std::swap(brace[x],brace[y]);
		update(1,1,n,x),update(1,1,n,y);
		printf("%d\n",seg[1].ans);
	}
	return 0;
}
?
Время: ? ms, память: ? КБ
Вердикт: ?
Ввод
?
Вывод участника
?
Ответ жюри
?
Комментарий чекера
?
Диагностика
?
Показать детали тестирования