Pagini recente » clasament-arhiva-educationala | Cod sursa (job #818758) | Cod sursa (job #1199004) | Cod sursa (job #485137) | Cod sursa (job #413707)
Cod sursa(job #413707)
#include <fstream>
#include <stdlib.h>
#include <limits.h>
using namespace std;
ifstream in ("scmax.in");
ofstream out("scmax.out");
struct item {
int val;
int idx;
};
int fcmp(const void* x,const void* y) {
int rez = ((item*)x)->val - ((item*)y)->val;
if (rez != 0)
return rez;
return ((item*)x)->idx - ((item*)y)->idx;
}
item* elem;
int main() {
int n, x;
in >> n;
elem = new item[n];
for (int i = 0; i < n; i++) {
in >> x;
elem[i].val = x;
elem[i].idx = i;
}
item* elem2 = new item[n];
for (int i = 0; i < n; i++)
elem2[i] = elem[i];
qsort(elem, n, sizeof(item), fcmp);
item* aux = new item[n];
for (int i = 0; i < n; i++) {
aux[i].val = elem[i].idx;
aux[i].idx = i;
}
qsort(aux, n, sizeof(item), fcmp);
int max = 1, crtMax = 1, idx = 0, crtIdx = 0;
for (int i = 1; i < n; i++) {
if (aux[i - 1].idx < aux[i].idx) {
crtMax++;
}
else {
if (crtMax > max) {
max = crtMax;
idx = crtIdx;
}
crtMax = 1;
crtIdx = i;
}
}
if (crtMax > max) {
max = crtMax;
idx = crtIdx;
}
out << max << "\n";
out << elem2[aux[idx].val].val << " ";
int j = 1;
for (int i = 1; i < max ; i++)
out << elem2[aux[idx + i].val].val << " ";
return 0;
}