bzoj1293 [SCOI2009] Monotonous queue of birthday gifts

A monotonous queue

code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
long long l,r,ans=2147483649,x;
map<long long,int>ma; 
int b[99999],n,k,i,q,j,cnt;
struct la
{
	long long v,x;
}a[1000005];
bool cmp(la a,la b)
{
	return a.x<b.x;
}
int main()
{
scanf("%d%d",&n,&k);
for(i=1;i<=k;i++)
{
scanf("%d",&q);
for(j=1;j<=q;j++)
{
scanf("%lld",&x);
	a[++cnt].v=i;
	a[cnt].x=x;
}			
}	
sort(a+1,a+1+n,cmp);
l=1;
cnt=0;
for(r=1;r<=n;r++)
{
	if(b[a[r].v]==0)++cnt;
	b[a[r].v]++;
	while(b[a[l].v]>1)
	b[a[l].v]--,l++;
	if(cnt==k)
	ans=min(ans,a[r].x-a[l].x);	
}
printf("%lld",ans);	
}

Guess you like

Origin blog.csdn.net/haobang866/article/details/79356166