Pagini recente » Borderou de evaluare (job #2543670) | Cod sursa (job #2678502) | Cod sursa (job #1850913) | Cod sursa (job #2253547) | Cod sursa (job #2773137)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int m, p[100005], t[100005];
int st, md, dr;
int n, v[100005];
void drum(int poz){
if(poz != 0){
drum(t[poz]);
fout<<v[poz]<<" ";
}
}
int main (){
fin>>n;
for(int i=1; i<=n; i++){
fin>>v[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=st;
p[st]=i;
t[i]=p[st-1];
}
fout<<m<<"\n";
drum(p[m]);
return 0;
}