Submission #1229962

#TimeUsernameProblemLanguageResultExecution timeMemory
1229962Muhammad_Aneeqpopa (BOI18_popa)C++20
61 / 100
213 ms464 KiB
#include <iostream>
#include <algorithm>
#include <numeric>
#include "popa.h"
using namespace std;
int const MAXNN=1e3+10;
// int s[MAXNN]={};
int lc[MAXNN],rc[MAXNN],pr[MAXNN],sf[MAXNN];
// bool query(int a,int b,int c,int d)
// {
// 	int g=0,g1=0;
// 	for (int i=a;i<=b;i++)
// 		g=gcd(g,s[i]);
// 	for (int i=c;i<=d;i++)
// 		g1=gcd(g1,s[i]);
// 	return (g==g1);
// }
int sol(int l,int r)
{
	if (l>r)
		return -1;
	if (l==r)
		return l;
	for (int i=l;i<=r;i++)
	{
		if (pr[i]<=l&&sf[i]>=r)
		{
			lc[i]=sol(l,i-1);
			rc[i]=sol(i+1,r);
			return i;
		}
	}
	return -1;
}
int solve(int N,int* left,int* right)
{
	for (int i=0;i<N;i++)
		lc[i]=rc[i]=-1;
	for (int i=0;i<N;i++)
	{
		{
			int st=-1,en=i;
			while (st+1<en)
			{
				int mid=(st+en)/2;
				if (query(mid,i,i,i))
					en=mid;
				else
					st=mid;
			}
			pr[i]=en;
		}
		{
			int st=i,en=N;
			while (st+1<en)
			{
				int mid=(st+en)/2;
				if (query(i,mid,i,i))
					st=mid;
				else
					en=mid;
			}
			sf[i]=st;
		}
	}
	int rt=sol(0,N-1);
	for (int i=0;i<N;i++)
		left[i]=lc[i],right[i]=rc[i];
	return rt;
}
// int main()
// {
// 	int n;
// 	cin>>n;
// 	for (int i=0;i<n;i++)
// 		cin>>s[i];
// 	int l[n],r[n];
// 	cout<<solve(n,l,r)<<endl;
// 	for (int i=0;i<n;i++)
// 		cout<<l[i]<<' '<<r[i]<<endl;
// }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...