Pagini recente » Cod sursa (job #78199) | Cod sursa (job #723125) | Cod sursa (job #1139377) | Cod sursa (job #1339291) | Cod sursa (job #1807689)
#include <fstream>
#define DEF 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,v[DEF],R[DEF],T[DEF],i,ln,F[DEF];
int main(){
fin >> n;
for (i = 1; i <= n; i ++){
fin >> v[i];
R[i] = -1;
}
T[1] = 1; ln = 1;
for (i = 2; i <= n; i++){
if (v[i] > v[T[ln]]){
T[ln + 1] = i;
R[i] = T[ln];
ln++;
}
else if (v[i] < v[T[1]]){
T[1] = i;
}
else{
int st,dr,mij;
st = 1;
dr = ln;
while (st <= dr && st > 0 && dr < ln+1){
mij = (st + dr)/2;
if (v[i] != v[T[mij]]){
if (v[i] > v[T[mij]] && v[i] < v[T[mij + 1]]){
T[mij + 1] = i;
break;
} else if (v[i] > v[T[mij + 1]]){
st = mij + 1;
} else if (v[i] < v[T[mij]]){
dr = mij - 1;
}
}
else break;
}
}
}
fout<<ln;
int curr = T[ln];
for (i = ln; i >= 1; i--){
F[i] = v[curr];
curr = R[curr];
}
fout<<endl;
for (i = 1; i <= ln; i++){
fout<<F[i]<<" ";
}
return 0;
}