Pagini recente » Cod sursa (job #1279368) | Cod sursa (job #3267979) | Cod sursa (job #479993) | Cod sursa (job #2024193) | Cod sursa (job #2180718)
#include<bits/stdc++.h>
using namespace std;
const int N=100020;
int l=1, a[N], p[N], q[N], s[N];
void caut(int i){
int st=1, x=a[i], dr=l, m=(st+dr)/2;
while(st<dr){
if(q[m]<=x)st=m+1;else dr=m;
m=(st+dr)/2;
}
if(q[m]<=x)m++;
while(q[m-1]>x)m--;
if(m==l+1){
l++, q[l]=x, p[i]=l;
return;
}
if(m==1 && q[m]==x)m=0;
q[m]=x, p[i]=m;
}
int main(){
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, mx=1;
f>>n;
f>>a[1];
q[1]=a[1];
p[1]=1;
for(int i=2;i<=n;i++){
f>>a[i];
caut(i);
if(p[i]>=p[mx])mx=i;
}
g<<l<<'\n';
int l1=l;
for(int i=mx;i>=1;i--){
if(p[i]==l)s[l--]=a[i];
}
for(int i=1;i<=l1;i++)g<<s[i]<<' ';
}