Pagini recente » Cod sursa (job #2264571) | Cod sursa (job #2041675) | Cod sursa (job #2051765) | Cod sursa (job #385839) | Cod sursa (job #480983)
Cod sursa(job #480983)
#include<cstdio>
#include<cstdlib>
#include<climits>
#include<fstream>
#include<iostream>
#include<map>
#include<vector>
#define MAXN 5002
#define max(a, b) (a>b?a:b)
#define min(a, b) (a>b?b:a)
using namespace std;
std::map<int, int> all;
int A[MAXN];
int vec[MAXN];
int N;
int mcount;
int pos[MAXN];
int get_next(int i) {
int rpos = pos[i];
if(i == 0) {
while(rpos < N && vec[rpos] != A[0])
rpos++;
if(rpos == N)
return -1;
return rpos;
}
else {
rpos = max(pos[i-1], rpos);
while(rpos < N && vec[rpos] != A[i])
rpos++;
if(rpos == N)
return -1;
return rpos;
}
}
int main() {
ifstream in("secv.in");
ofstream out("secv.out");
in >> N;
for(int i = 0; i < N; i++) {
in >> vec[i];
all[vec[i]] = 1;
}
int i = 0;
for(std::map<int, int>::iterator it = all.begin(); it != all.end(); it++) {
A[i++] = it->first;
}
mcount = i;
int cur_min = INT_MAX;
while(true) {
for(i = 0; i < mcount; i++) {
pos[i] = get_next(i);
if(pos[i] == -1)
goto done;
printf("%d ", pos[i]);
}
cur_min = min(pos[mcount - 1] - pos[0], cur_min);
printf("\n");
pos[0]++;
}
done:
printf("[%d]\n", cur_min);
out << (cur_min + 1);
return 0;
}