Pagini recente » Cod sursa (job #666072) | Cod sursa (job #817184) | Cod sursa (job #985750) | Cod sursa (job #1644133) | Cod sursa (job #750497)
Cod sursa(job #750497)
#include<fstream>
using namespace std;
#define NMAX 100005
int v[NMAX], b[NMAX], pre[NMAX], n, maxim = 1;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int search(int x){
int p = 1, u = maxim, m;
while (p < u){
m = (p+u)/2;
if (v[x] <= v[b[m]]) u = m;
else p = m+1;
}
if (v[b[p]] < v[x]) return 0;
return p;
}
void scrie(int i){
if (pre[i]) scrie(pre[i]);
fout<<v[i]<<" ";
}
int main(){
int i, poz;
fin>>n;
for (i=1; i<=n; ++i) fin>>v[i];
b[1]=1;
for (i=2; i<=n; ++i){
poz = search(i);
if (poz == 0){
pre[i] = b[maxim];
b[++maxim] = i;
}
else{
b[poz] = i;
pre[i] = b[poz-1];
}
}
fout<<maxim<<endl;
if (maxim > 1) scrie(pre[b[maxim]]);
fout<<v[b[maxim]]<<endl;
return 0;
}