您的位置:首页 > 其它

[BZOJ 1293][SCOI2009]生日礼物:单调队列

2017-04-17 14:24 411 查看
点击这里查看原题

把所有珠子读进来,按位置排序,做单调队列。

讨论区有人说inf要设成2^31-1,于是就把ans设为了0x7fffffff。

/*
User:Small
Language:C++
Problem No.:1293
*/
#include<bits/stdc++.h>
#define ll long long
#define inf 999999999
using namespace std;
const int M=1e6+5;
int n,k,tot,s,t,num[65],res,ans=0x7fffffff;
struct no{
int p,c;
bool operator<(const no b)const{
return p<b.p;
}
}z[M];
int main(){
freopen("data.in","r",stdin);//
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++){
int sum,x;
scanf("%d",&sum);
while(sum--){
scanf("%d",&x);
z[++tot]=(no){x,i};
}
}
sort(z+1,z+tot+1);
s=1;
for(int i=1;i<=tot;i++){
if(++num[z[i].c]==1) res++;
while(res==k&&s<=tot){
if(num[z[s].c]==1) break;
num[z[s].c]--;
s++;
}
if(res==k) ans=min(ans,z[i].p-z[s].p);
}
printf("%d\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: