10196 2024. 03. 29 12:20:36 111 Zárójelek cpp17 Időlimit túllépés 0/100 588ms 253932 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long

#define MZ 500000

struct ST{
	int n;
	vector<int>a,b;
	
	ST(int n):n(n),a(n*4,INT_MIN),b(n*4,-1){
	}
	
	pair<int,int>query(int i,int l,int r,int ll,int rr){
		if(l>rr||r<ll){
			return {INT_MIN,-1};
		}
		if(l>=ll&&r<=rr){
			return {a[i],b[i]};
		}
		auto[al,bl]=query(i*2+1,l,(l+r)/2,ll,rr);
		auto[ar,br]=query(i*2+2,(l+r)/2+1,r,ll,rr);
		return al>=ar?pair<int,int>{al,bl}:pair<int,int>{ar,br};
	}
	
	pair<int,int>query(int ll,int rr){
		auto it=max_element(a.begin()+ll,a.begin()+rr+1);
		return{*it,it-a.begin()};
		// return query(0,0,n-1,ll,rr);
	}
	
	void update(int i,int l,int r,int ii,int xx){
		if(l>ii||r<ii){
			return;
		}
		if(l==r){
			a[i]=xx;
			b[i]=l;
			return;
		}
		update(i*2+1,l,(l+r)/2,ii,xx);
		update(i*2+2,(l+r)/2+1,r,ii,xx);
		a[i]=a[i*2+1]>=a[i*2+2]?a[i*2+1]:a[i*2+2];
		b[i]=a[i*2+1]>=a[i*2+2]?b[i*2+1]:b[i*2+2];
	}
	
	void update(int ii,int xx){
		// update(0,0,n-1,ii,xx);
		a[ii]=xx;
	}
};

signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int N;
	cin>>N;
	ST a(MZ),b(MZ);
	vector<int>ma(MZ),mb(MZ),za(MZ),zb(MZ);
	set<int>aa,bb;
	for(int i=0;i<MZ;i++){
		aa.insert(i);
		bb.insert(i);
	}
	int x=0,c=0;
	for(int i=0;i<N;i++){
		string S;
		cin>>S;
		int y=0,z=0;
		for(char c:S){
			if(c=='('){
				y++;
			}
			else{
				y--;
				z=max(z,-y);
			}
		}
		x+=y;
		if(y>=0){
			c++;
			int zz=*aa.lower_bound(MZ/2-z);
			aa.erase(zz);
			a.update(zz,y);
			ma[zz]=i;
			za[zz]=z;
		}
		else{
			int zz=*bb.lower_bound(MZ/2-z);
			bb.erase(zz);
			b.update(zz,y+z);
			mb[zz]=i;
			zb[zz]=z;
		}
	}
	if(x!=0){
		cout<<-1<<'\n';
		return 0;
	}
	vector<int>ans;
	while(ans.size()<N){
		if(c>0){
			c--;
			auto[y,z]=a.query(MZ/2-x,MZ);
			if(y==INT_MIN){
				cout<<-1<<'\n';
				return 0;
			}
			a.update(z,INT_MIN);
			x+=y;
			ans.push_back(ma[z]);
		}
		else{
			auto[yz,z]=b.query(MZ/2-x,MZ);
			if(yz==INT_MIN){
				cout<<-1<<'\n';
				return 0;
			}
			b.update(z,INT_MIN);
			x+=yz-zb[z];
			ans.push_back(mb[z]);
		}
	}
	for(int i:ans){
		cout<<i+1<<' ';
	}
	cout<<'\n';
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Időlimit túllépés 505ms 251916 KiB
2 Időlimit túllépés 575ms 126480 KiB
subtask2 0/11
3 Elfogadva 460ms 252436 KiB
4 Elfogadva 456ms 252652 KiB
5 Időlimit túllépés 505ms 252556 KiB
6 Elfogadva 462ms 252568 KiB
7 Elfogadva 460ms 253080 KiB
8 Elfogadva 458ms 253480 KiB
subtask3 0/6
9 Időlimit túllépés 577ms 127156 KiB
10 Időlimit túllépés 500ms 253052 KiB
11 Elfogadva 458ms 253036 KiB
subtask4 0/14
12 Időlimit túllépés 577ms 127660 KiB
13 Időlimit túllépés 577ms 127676 KiB
subtask5 0/23
14 Időlimit túllépés 573ms 127708 KiB
15 Időlimit túllépés 573ms 127812 KiB
subtask6 0/19
16 Elfogadva 497ms 253476 KiB
17 Időlimit túllépés 569ms 127892 KiB
18 Időlimit túllépés 564ms 127908 KiB
19 Időlimit túllépés 577ms 128100 KiB
20 Időlimit túllépés 573ms 128124 KiB
21 Időlimit túllépés 569ms 128228 KiB
22 Időlimit túllépés 573ms 128104 KiB
23 Időlimit túllépés 569ms 128304 KiB
24 Időlimit túllépés 564ms 128252 KiB
subtask7 0/27
25 Elfogadva 483ms 253932 KiB
26 Időlimit túllépés 564ms 128140 KiB
27 Időlimit túllépés 556ms 128076 KiB
28 Időlimit túllépés 573ms 128008 KiB
29 Időlimit túllépés 560ms 128208 KiB
30 Időlimit túllépés 552ms 128140 KiB
31 Időlimit túllépés 565ms 128460 KiB
32 Időlimit túllépés 580ms 128456 KiB
33 Időlimit túllépés 577ms 128408 KiB
34 Időlimit túllépés 588ms 128416 KiB
35 Időlimit túllépés 573ms 128488 KiB
36 Időlimit túllépés 569ms 128332 KiB
37 Időlimit túllépés 577ms 128532 KiB
38 Időlimit túllépés 564ms 128432 KiB
39 Időlimit túllépés 573ms 128412 KiB
40 Időlimit túllépés 552ms 128536 KiB
41 Időlimit túllépés 587ms 128712 KiB
42 Időlimit túllépés 582ms 128904 KiB
43 Időlimit túllépés 573ms 128960 KiB