Pagini recente » Cod sursa (job #291512) | Cod sursa (job #1790186) | Cod sursa (job #2973248) | Cod sursa (job #1218374) | Cod sursa (job #1482906)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("secv.in");
ofstream fout("secv.out");
#define MAXN 5005
int n, howMany;
bitset<MAXN> used, aux;
vector<int> V, ans;
int check(int index){
aux.reset();
int cnt=1, i, indexAns=ans[index]-1, dist=1;
aux[V[index]]=1;
for(i=index+1;i<=n && indexAns;++i, ++dist)
if(ans[i]==indexAns)
if(!aux[V[i]]){
++cnt, --indexAns;
aux[V[i]]=1;
}
if(cnt==howMany)
return dist;
return 0;
}
int main(){
fin>>n;
V.resize(n+1, 0);
ans.resize(n+1, 0);
int i, j, best, miN=(1<<30);
for(i=1;i<=n;++i){
fin>>V[i];
if(!used[V[i]])
++howMany;
used[V[i]]=1;
}
ans[n]=1;
for(i=n-1;i>=1;--i){
best=0;
for(j=i+1;j<=n;++j)
if(V[i]<V[j])
best=max(best, ans[j]);
ans[i]=best+1;
}
for(i=1;i<=n;++i)
if(ans[i]>=howMany){
j=check(i);
if(j) miN=min(miN, j);
}
fout<<miN;
return 0;
}