Codeforces Round #388 (Div. 2), problem: (D) Leaving Auction Solution in C/C++

Codeforces Round #388 (Div. 2), problem: (D) Leaving Auction Solution in C/C++

#include<stdio.h>
#include<stdlib.h>
typedef unsigned u;
u *G[222222],Ga[222222],Gi[222222],M[222222],P[222222],S[222222],V[222222];
int F(const void*x,const void*y)
{
	if(M[*(u*)x]>M[*(u*)y])return 1;
	if(M[*(u*)x]<M[*(u*)y])return-1;
	if(*(u*)x<*(u*)y)return 1;
	if(*(u*)x>*(u*)y)return-1;
	return 0;
}
int main()
{
	u n,i=-1,j,k,q=0,Q,lo,hi,mi;
	for(scanf("%u",&n);++i<n;S[i]=i)
	{
		scanf("%u%u",&j,&k);liar:;
		if(Ga[j]==Gi[j])
		{
			if(!Ga[j])G[j]=(u*)calloc(Ga[j]=1,sizeof(u));
			else G[j]=(u*)realloc(G[j],(Ga[j]<<=1)*sizeof(u));
		}
		G[j][Gi[j]++]=M[j]=k;P[j]=1;
	}
	if(i==n){j=k=0;goto liar;}
	qsort(S,i,sizeof(u),F);
	for(scanf("%u",&Q);q++<Q;)
	{
		for(scanf("%u",&k);k--;V[j]=q)scanf("%u",&j);
		for(k=i;k;)if(V[S[--k]]!=q&&P[S[k]])break;
		if(!k){printf("0 0\n");continue;}
		if(M[S[k]]<1){printf("%u 0\n",S[k]);continue;}
		for(j=k;j;)if(V[S[--j]]!=q&&P[S[j]])break;
		j=M[S[j]];k=S[k];lo=0;hi=Gi[k]-1;
		while((mi=(lo+hi)>>1)>lo)
		{
			if(G[k][mi]>=j)hi=mi;
			else lo=mi;
		}
		if(G[k][lo]>=j)hi=lo;
		printf("%u %u\n",k,G[k][hi]);
	}
	return 0;
}

Codeforces Round #388 (Div. 2), problem: (D) Leaving Auction Solution in C/C++

#include<stdio.h>
#include<stdlib.h>
typedef unsigned u;
u *G[222222],Ga[222222],Gi[222222],M[222222],P[222222],S[222222],V[222222];
int F(const void*x,const void*y)
{
	if(M[*(u*)x]>M[*(u*)y])return 1;
	if(M[*(u*)x]<M[*(u*)y])return-1;
	if(*(u*)x<*(u*)y)return 1;
	if(*(u*)x>*(u*)y)return-1;
	return 0;
}
int main()
{
	u n,i=-1,j,k,q=0,Q,lo,hi,mi;
	for(scanf("%u",&n);++i<n;S[i]=i)
	{
		scanf("%u%u",&j,&k);liar:;
		if(Ga[j]==Gi[j])
		{
			if(!Ga[j])G[j]=(u*)calloc(Ga[j]=1,sizeof(u));
			else G[j]=(u*)realloc(G[j],(Ga[j]<<=1)*sizeof(u));
		}
		G[j][Gi[j]++]=M[j]=k;P[j]=1;
	}
	if(i==n){j=k=0;goto liar;}
	qsort(S,i,sizeof(u),F);
	for(scanf("%u",&Q);q++<Q;)
	{
		for(scanf("%u",&k);k--;V[j]=q)scanf("%u",&j);
		for(k=i;k;)if(V[S[--k]]!=q&&P[S[k]])break;
		if(!k){printf("0 0\n");continue;}
		if(M[S[k]]<1){printf("%u 0\n",S[k]);continue;}
		for(j=k;j;)if(V[S[--j]]!=q&&P[S[j]])break;
		j=M[S[j]];k=S[k];lo=0;hi=Gi[k]-1;
		while((mi=(lo+hi)>>1)>lo)
		{
			if(G[k][mi]>=j)hi=mi;
			else lo=mi;
		}
		if(G[k][lo]>=j)hi=lo;
		printf("%u %u\n",k,G[k][hi]);
	}
	return 0;
}

More from author

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Related posts

Advertismentspot_img

Latest posts

Amala meal: Kogi probes deaths of four family members

The Kogi State Government has officially commenced an exhaustive investigation following the tragic demise of four family members in Ihima, located within the Okehi...

I Tried Viral Kitchen Gadgets For 30 Days Here Is the Honest Truth

📢 As an Amazon Associate, I earn from qualifying purchases.There comes a point when you realise that tolerating a frustrating situation is costing you...

ROSIE SERENADES THE DON…

Comedian and television personality Rosie O’Donnell wrapped up her week-long stint as guest host on Jimmy Kimmel Live! with an unforgettable, razor-sharp send-off aimed...

Want to stay up to date with the latest news?

We would love to hear from you! Please fill in your details and we will stay in touch. It's that simple!