Pagini recente » Cod sursa (job #2929531) | Cod sursa (job #658784) | Cod sursa (job #1235384) | Cod sursa (job #814078) | Cod sursa (job #2867892)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
#define NMAX 100005
int n, a[NMAX];
int cautare(const int v[], int st, int dr, int x)
{
int mij;
while(dr - st > 1){
mij = st + (dr - st) / 2;
if (v[mij] < x){
st = mij;
}else{
dr = mij;
}
}
return dr;
}
void Scmax(int N, int v[])
{
int D[NMAX], p[NMAX];
memset(D, 0, sizeof(D));
int k = 1, nr;
D[k] = v[1];
p[1] = 1;
for (int i=2;i<=n;i++){
if (v[i] > D[k]){
D[++k] = v[i];
p[i] = k;
}else{
nr = cautare(D, 1, k, v[i]);
D[nr] = v[i];
p[i] = nr;
}
}
int sir[NMAX];
int j=n;
for (int i=k;i>=1;--i){
while(p[j] != i)
j --;
sir[i] = j;
}
fout << k << '\n';
for (int i=1;i<=k;i++){
fout << v[sir[i]] << ' ';
}
}
int main() {
fin >> n;
for (int i=1;i<=n;i++){
fin >> a[i];
}
Scmax(n, a);
return 0;
}