Pagini recente » Cod sursa (job #1037024) | Cod sursa (job #993949) | Cod sursa (job #1986739) | Cod sursa (job #1338097) | Cod sursa (job #2097117)
#include <bits/stdc++.h>
#define MAXN 5000
struct S{
int val;
int ind;
}v[1 + MAXN];
bool cmp(S A, S B){
return A.val < B.val;
}
bool cmp2(S A, S B){
return A.ind < B.ind;
}
std::vector <int> V[1 + MAXN];
int st[1 + MAXN];
int main(){
FILE*fi,*fo;
fi = fopen("secv.in","r");
fo = fopen("secv.out","w");
int n;
fscanf(fi,"%d", &n);
for(int i = 1; i <= n; i++){
fscanf(fi,"%d", &v[i].val);
v[i].ind = i;
}
std::sort(v + 1, v + n + 1, cmp);
int prev = 0;
for(int i = 1; i <= n; i++){
if(v[i].val == prev)
v[i].val = v[i - 1].val;
else{
prev = v[i].val;
v[i].val = v[i - 1].val + 1;
}
}
int last = v[n].val, ok = 1, min = 1000000000;
std::sort(v + 1, v + n + 1, cmp2);
for(int i = 1; i <= n; i++)
V[v[i].val].push_back(i);
for(int i = 1; i <= n; i++){
prev = i;
for(int j = 1; j <= last; j++){
while(st[j] < V[j].size() && V[j][st[j]] < prev) st[j]++;
if(st[j] == V[j].size()) ok = 0;
prev = V[j][st[j]];
}
if(ok && V[last][st[last]] - i + 1 < min) min = V[last][st[last]] - i + 1;
}
fprintf(fo,"%d", min);
fclose(fi);
fclose(fo);
return 0;
}