Submission #1269070

#TimeUsernameProblemLanguageResultExecution timeMemory
1269070tryharderforioi100Longest beautiful sequence (IZhO17_subsequence)C11
40 / 100
5291 ms9820 KiB
#include <stdio.h>
typedef int ll;
#define max(a, b) (((a) > (b)) ? (a) : (b))
ll pre[2000005];
int main()
{
	ll t=1;
	//cin>>t;
	while(t--)
	{
		ll n;
		scanf("%d",&n);
		ll a[n],b[n],i;
		for(i=0;i<n;i++)
		{
			scanf("%d",&a[i]);
		}
		for(i=0;i<n;i++)
		{
			scanf("%d",&b[i]);
		}
		for(i=0;i<2000000;i++)
		{
			pre[i]=__builtin_popcount(i);
		}
		ll dp[n],prev[n];
		for(i=0;i<n;i++)
		{
			dp[i]=1;
			prev[i]=-1;
		}
		ll val=1;
		for(i=1;i<n;i++)
		{
			ll lim=100000;
			if(b[i]<=10)
			{
				lim=50000;
			}
			ll j;
			for(j=i-1;j>=max(0LL,i-lim);j--)
			{
				if(pre[a[i]&a[j]]==b[i]&&dp[i]<dp[j]+1)
				{
					dp[i]=dp[j]+1;
					prev[i]=j;
				}
			}
			val=max(val,dp[i]);
		}
		for(i=0;i<n;i++)
		{
			if(dp[i]==val)
			{
				break;
			}
		}
		ll ans[val];
		ll cur=val-1;
		while(i!=-1)
		{
			ans[cur]=i+1;
			i=prev[i];
			cur--;
		}
		printf("%d\n",val);
		for(i=0;i<val;i++)
		{
			printf("%d ",ans[i]);
		}
		printf("\n");
	}	
	return 0;
}
// Author: tryharderforioi100

Compilation message (stderr)

subsequence.c: In function 'main':
subsequence.c:12:17: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   12 |                 scanf("%d",&n);
      |                 ^~~~~~~~~~~~~~
subsequence.c:16:25: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |                         scanf("%d",&a[i]);
      |                         ^~~~~~~~~~~~~~~~~
subsequence.c:20:25: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |                         scanf("%d",&b[i]);
      |                         ^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...