Pagini recente » Cod sursa (job #1731767) | Istoria paginii runda/ccex2015 | Clasament labareala | Cod sursa (job #2002652) | Cod sursa (job #764552)
Cod sursa(job #764552)
#include <fstream>
#include <algorithm>
#include <vector>
#define N 5010
using namespace std;
ifstream f("secv.in");
ofstream g("secv.out");
int n,i,V[N],j,ANS=99999;
vector <int> A[N],B,S;
int SearchP (int x)
{
int p=0,u=S.size()-1,m;
while (p<=u)
{
m=(p+u)/2;
if (S[m]==x) return m;
if (S[m]<x) p=m+1;
else u=m-1;
}
return 0;
}
int Search (vector<int> &A, int x)
{
int p=0,u=A.size()-1,m,ANS=-999;
while (p<=u)
{
m=(p+u)/2;
if (A[m]>=x)
{
ANS=A[m];
u=m-1;
}
else p=m+1;
}
return ANS;
}
int Solve (int p)
{
int m=p+1;
for (int j=1;j<S.size();j++)
{
m=Search(A[j],m)+1;
if (m<0) return 999999;
}
return m-p;
}
int main ()
{
f >> n;
for (i=1;i<=n;i++)
{
f >> V[i];
B.push_back(V[i]);
}
sort(B.begin(),B.end());
S.push_back(B[0]);
for (i=1;i<B.size();i++)
if (B[i]!=B[i-1])
S.push_back(B[i]);
for (i=1;i<=n;i++)
A[SearchP(V[i])].push_back(i);
for (i=0;i<A[0].size();i++)
ANS=min(ANS,Solve(A[0][i]));
g << ANS << '\n';
f.close();g.close();
return 0;
}