Pagini recente » Diferente pentru utilizator/delia intre reviziile 5 si 6 | Profil bogdanfabregas | Monitorul de evaluare | Cod sursa (job #1700979) | Cod sursa (job #2772064)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, m, v[100005];
int p[100005], t[100005];
int st, dr, md;
void drum(int poz){
if(poz != -1)
drum(t[poz]);
else
return;
fout<<v[poz]<<" ";
}
int main (){
fin>>n;
for(int i=1; i<=n; i++)
fin>>v[i];
m=0;
v[0]=-1;
p[0]=-1;
for(int i=1; i<=n; i++){
st=0;
dr=m;
while(st <= dr){
md = (st+dr)/2;
if(v[i] > v[p[md]])
st=md+1;
else
dr=md-1;
}
if(st > m){
m++;
p[m]=i;
t[i]=p[m-1];
}else
if(v[i] < v[p[st]]){
p[st]=i;
t[i]=p[st-1];
}
}
fout<<m<<"\n";
drum(p[m]);
return 0;
}