1 条题解
-
0
离散化+双指针版:
#include<bits/stdc++.h> using namespace std; const int N=1e6+10; int b[N],blen;vector<int>G[N],G1[100];int sum[100]; int main() { int n,m;cin>>n>>m; for(int i=1;i<=m;i++) { int sum;cin>>sum; for(int j=1,x;j<=sum;j++)cin>>x,b[++blen]=x,G1[i].push_back(x); } sort(b+1,b+blen+1);int k=unique(b+1,b+blen+1)-b-1; for(int i=1;i<=m;i++) for(int j:G1[i]) { int x=lower_bound(b+1,b+k+1,j)-b; G[x].push_back(i); } int l=1,r=0,s=0; while(s!=m) { r++; for(int y:G[r]){if(sum[y]==0)s++;sum[y]++;} } int ans=b[r]-b[l]; for(;r<=k;) { while(1) { if(l==r)break; bool bk=1; for(int i:G[l])if(sum[i]==1){bk=0;break;} if(!bk)break; for(int i:G[l])sum[i]--;l++; } ans=min(ans,b[r]-b[l]); r++; for(int i:G[r]){sum[i]++;} } cout<<ans; return 0; }
- 1
信息
- ID
- 2946
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 10
- 标签
- 递交数
- 5
- 已通过
- 2
- 上传者