Pagini recente » Cod sursa (job #493569) | Cod sursa (job #511615) | Cod sursa (job #472634) | Cod sursa (job #2843259) | Cod sursa (job #480979)
Cod sursa(job #480979)
#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)
using namespace std;
std::map<int, int> all;
int A[MAXN];
int vec[MAXN];
int N;
int count;
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;
}
count = i;
int cur_min = INT_MAX;
while(true) {
for(i = 0; i < count; i++) {
pos[i] = get_next(i);
if(pos[i] == -1)
goto done;
printf("%d ", pos[i]);
}
cur_min = pos[count - 1] - pos[0];
printf("\n");
pos[0]++;
}
done:
printf("[%d]\n", cur_min);
out << (cur_min + 1);
return 0;
}