站外题求救
  • 板块学术版
  • 楼主Wildchesse
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/1/29 16:57
  • 上次更新2023/10/24 02:40:48
查看原帖
站外题求救
362022
Wildchesse楼主2023/1/29 16:57

https://vjudge.net/problem/POJ-3320

#include<iostream>
#include<algorithm>
#define int long long
using namespace std;
int n,cnt,type,ans=1000009,cntt[1000005];
struct node{
	int bef,aft,id;
}a[1000005];
bool cmp1(node a,node b){
	return a.bef<b.bef;
}
bool cmp2(node a,node b){
	return a.id<b.id;
}
void add(int x){
	if(cntt[x]==0){
		cnt++;
	}
	cntt[x]++;
}
void jian(int x){
	if(cntt[x]==1){
		cnt--;
	}
	cntt[x]--;
}
signed main(){
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>a[i].bef;
		a[i].id=i;
	}
	sort(a,a+n,cmp1);
	a[0].aft=1;
	for(int i=0;i<n;i++){
		if(a[i].bef==a[i-1].bef){
			a[i].aft=a[i-1].aft;
		}
		else{
			a[i].aft=a[i-1].aft+1;
		}
	}
	type=a[n-1].aft;
	sort(a,a+n,cmp2);
	cnt=1; 
	cntt[a[0].aft]++;
	for(int l=0,r=1;l<n;){
		while(cnt<type){
			r++;
			add(a[r].aft);
		}
		if(r-l+1<ans){
			ans=r-l+1;
		}
		l++;
		jian(a[l].aft);
	}
	cout<<ans<<endl;
	return 0;
}

样例过了捏,交上去看不懂什么意思,反正没对

2023/1/29 16:57
加载中...