Submission #13080323


Source Code Expand

#pragma GCC optimize("O3")
#pragma GCC target("sse4")
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const double PI=acos(-1.0);
#define t1(x)             cerr<<#x<<"="<<x<<endl
#define t2(x, y)          cerr<<#x<<"="<<x<<" "<<#y<<"="<<y<<endl
#define t3(x, y, z)       cerr<<#x<<"=" <<x<<" "<<#y<<"="<<y<<" "<<#z<<"="<<z<<endl
#define t4(a,b,c,d)       cerr<<#a<<"="<<a<<" "<<#b<<"="<<b<<" "<<#c<<"="<<c<<" "<<#d<<"="<<d<<endl
#define t5(a,b,c,d,e)     cerr<<#a<<"="<<a<<" "<<#b<<"="<<b<<" "<<#c<<"="<<c<<" "<<#d<<"="<<d<<" "<<#e<<"="<<e<<endl
#define t6(a,b,c,d,e,f)   cerr<<#a<<"="<<a<<" "<<#b<<"="<<b<<" "<<#c<<"="<<c<<" "<<#d<<"="<<d<<" "<<#e<<"="<<e<<" "<<#f<<"="<<f<<endl
#define GET_MACRO(_1,_2,_3,_4,_5,_6,NAME,...) NAME
#define tr(...) GET_MACRO(__VA_ARGS__,t6,t5, t4, t3, t2, t1)(__VA_ARGS__)
#define __ freopen("input.txt","r",stdin);freopen("output.txt","w",stdout);
#define fastio() ios::sync_with_stdio(0);cin.tie(0)
#define MEMS(x,t) memset(x,t,sizeof(x));
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
/*-------------------------------------------------------------------------------------------------------------------------------------*/
//#define MOD 1000000007
#define endl "\n" 
#define int long long

#define ld long double
/*-------------------------------------------------------------------------------------------------------------------------------------*/


struct dat
{
	//Use required attributes
	int mn;
	int idx2;
	//Default Values
	dat() : mn(-1e9),idx2(-1) {};
};

struct SegTree
{
	int N;
	vector<dat> st;
	vector<bool> cLazy;
	vector<int> lazy;

	void init(int n)
	{
		N = n;
		st.resize(4 * N + 5);
		cLazy.assign(4 * N + 5, false);
		lazy.assign(4 * N + 5, 0);
	}
	//Write reqd merge functions
	void merge(dat &cur, dat &l, dat &r) 
	{
		if(l.mn>=r.mn)
		{
			cur.mn=l.mn;
			cur.idx2=l.idx2;
		}
		else
		{
			cur.mn=r.mn;
			cur.idx2=r.idx2;
		}
	}
	
	//	Handle lazy propagation appriopriately
	// 	think what should happen if clazy[2*node] is already 1 before propagate is called
	void propagate(int node, int L, int R)
	{
		if(L != R)
		{
			cLazy[node*2] = 1;
			cLazy[node*2 + 1] = 1;
			lazy[node*2] = lazy[node];
			lazy[node*2 + 1] = lazy[node]; 
		}
		st[node].mn = lazy[node];
		cLazy[node] = 0;
	}

	
	dat Query(int node, int L, int R, int i, int j)
	{
		if(cLazy[node])
			propagate(node, L, R);
		if(j<L || i>R)
			return dat();
		if(i<=L && R<=j)
			return st[node];
		int M = (L + R)/2;
		dat left=Query(node*2, L, M, i, j);
		dat right=Query(node*2 + 1, M + 1, R, i, j);
		dat cur;
		merge(cur, left, right);
		return cur;
	}

	dat pQuery(int node, int L, int R, int pos)
	{
		if(cLazy[node])
			propagate(node, L, R);
		if(L == R)
			return st[node];
		int M = (L + R)/2;
		if(pos <= M)
			return pQuery(node*2, L, M, pos);
		else
			return pQuery(node*2 + 1, M + 1, R, pos);
	}	

	

	void pUpdate(int node, int L, int R, int pos, int val)
	{
		if(cLazy[node])
			propagate(node, L, R);
		if(L == R)
		{
			st[node].mn=val;
			st[node].idx2=L;
			return;
		}
		int M = (L + R)/2;
		if(pos <= M)
			pUpdate(node*2, L, M, pos, val);
		else
			pUpdate(node*2 + 1, M + 1, R, pos, val);
		merge(st[node], st[node*2], st[node*2 + 1]);
	}

	dat query(int pos)
	{
		return pQuery(1, 1, N, pos);
	}

	dat query(int l, int r)
	{
		return Query(1, 1, N, l, r);
	}

	void update(int pos, int val)
	{
		pUpdate(1, 1, N, pos, val);
	}

	
};

struct info
{
	int idx,mi,sum;
};
bool cmp(info a,info b)
{
	return a.mi<b.mi;
}
SegTree st;
int32_t main()
{
	fastio();
	int n;
	cin>>n;
	st.init(n+5);
	string s[n];
	info inf[n];
	for(int i=0;i<n;i++)
	{
		cin>>s[i];
		int mi=0;
		int cur=0;
		for(int j=0;j<s[i].length();j++)
		{
			if(s[i][j]=='(')cur++;
			else cur--;
			mi=min(mi,cur);
		}
		inf[i]={i,mi,cur};
	}
	sort(inf,inf+n,cmp);
	int temp[n];
	for(int i=0;i<n;i++)
	{
		temp[i]=inf[i].mi;
		st.update(i+1,inf[i].sum);
	}	
	string str;
	int cur=0;
	for(int cc=0;cc<n;cc++)
	{
		if(cur<0)
		{
			cout<<"No\n";
			return 0;
		}
		int pt=lower_bound(temp,temp+n,-cur)-temp;
		dat tmp=st.query(pt+1,n);
		st.update(tmp.idx2,-1000000000);
		cur+=tmp.mn;
	}
	if(cur==0)
	{
		cout<<"Yes\n";
	}
	else
	{
		cout<<"No\n";
	}
}

Submission Info

Submission Time
Task F - Bracket Sequencing
User aditya_sheth
Language C++ (GCC 9.2.1)
Score 0
Code Size 4416 Byte
Status WA
Exec Time 619 ms
Memory 159956 KiB

Compile Error

./Main.cpp: In function ‘int32_t main()’:
./Main.cpp:171:16: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::__cxx11::basic_string<char>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
  171 |   for(int j=0;j<s[i].length();j++)
      |               ~^~~~~~~~~~~~~~

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 600
Status
AC × 4
AC × 20
WA × 12
Set Name Test Cases
Sample sample_01, sample_02, sample_03, sample_04
All random_01, random_02, random_03, random_04, random_05, random_06, random_07, random_08, random_09, random_10, random_11, random_12, random_13, random_21, random_22, random_23, random_31, random_32, random_33, random_41, random_42, random_43, random_51, random_52, random_53, random_61, random_62, random_63, sample_01, sample_02, sample_03, sample_04
Case Name Status Exec Time Memory
random_01 WA 170 ms 43832 KiB
random_02 AC 532 ms 131164 KiB
random_03 AC 239 ms 62060 KiB
random_04 AC 619 ms 159956 KiB
random_05 AC 616 ms 159956 KiB
random_06 AC 265 ms 71780 KiB
random_07 AC 35 ms 11644 KiB
random_08 AC 13 ms 5516 KiB
random_09 AC 9 ms 4840 KiB
random_10 AC 266 ms 71776 KiB
random_11 WA 2 ms 3600 KiB
random_12 WA 2 ms 3648 KiB
random_13 WA 2 ms 3648 KiB
random_21 AC 2 ms 3512 KiB
random_22 WA 2 ms 3576 KiB
random_23 WA 2 ms 3584 KiB
random_31 WA 3 ms 3536 KiB
random_32 WA 2 ms 3504 KiB
random_33 WA 2 ms 3648 KiB
random_41 WA 2 ms 3508 KiB
random_42 WA 2 ms 3636 KiB
random_43 WA 2 ms 3632 KiB
random_51 AC 2 ms 3668 KiB
random_52 AC 2 ms 3460 KiB
random_53 AC 2 ms 3600 KiB
random_61 AC 79 ms 28464 KiB
random_62 AC 110 ms 39872 KiB
random_63 AC 178 ms 62324 KiB
sample_01 AC 2 ms 3428 KiB
sample_02 AC 2 ms 3608 KiB
sample_03 AC 2 ms 3552 KiB
sample_04 AC 2 ms 3632 KiB