Pagini recente » Cod sursa (job #676605) | Cod sursa (job #2325260) | Cod sursa (job #2110050) | Cod sursa (job #617889) | Cod sursa (job #2577678)
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define pb push_back
#define ft first
#define sc second
ifstream fin("scmax.in"); ofstream fout("scmax.out");
int lm=0;
int a[100010], u[100010], n;
string l[100010];
int bs(int x, int r, int l){
int m=r+l; m/=2;
if(l<r){return -1;}
if( x>u[m] && (x<=u[m+1] || m>=lm ) ){return m+1;}
if(l==r){if(x<=u[m]){return m;}else{return -1;} }
if(x<=u[m]){return bs(x, r, m);}
if(x>u[m+1] ){return bs(x, m+1, l) ; }
}
int main(){
fin>>n;
for(int i=1; i<=n; i++){
fin>>a[i];
if(lm<1){u[1]=a[i]; lm++; l[1]=to_string(a[i]); continue;}
int p=bs(a[i], 1, lm);
if(p>0){
l[p]=l[p-1]+" "+to_string(a[i]);
u[p]=a[i];
}
lm=max(lm, p);
}
if(l[lm][0]==' '){l[lm]=l[lm].substr(1, l[lm].length()-1 );}
fout<<lm<<"\n"<<l[lm];
return 0;
}