Pagini recente » Cod sursa (job #2192156) | Cod sursa (job #1341925) | Cod sursa (job #78966) | Cod sursa (job #1447870) | Cod sursa (job #1049634)
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[100001],q[100001],P[100001],qq,pp,i,poz,m,sol[100001];
int cbin(int x){
int p,u;
p=1;u=qq;
m=(p+u)/2;
while(p<=u){
if(q[m]<x){
p=m+1;
m=(p+u)/2;}
else
if(q[m]>x && q[m-1]<x)
return m;
else
if(q[m]==x)
return 0;
else{
u=m-1;
m=(p+u)/2;}
}
if(q[m]<q[qq])
return m;
else
return m+1;
}
int main(){
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
q[1]=v[1];
P[1]=1;
qq=pp=1;
for(i=2;i<=n;i++)
{
poz=cbin(v[i]);
if(poz!=m+1)
q[poz]=v[i];
else
q[++qq]=v[i];
P[++pp]=poz;
}
g<<qq<<'\n';
int val=qq;
for(i=n;i>=1 && val>0;i--)
if(P[i]==val)
sol[val--]=v[i];
for(i=1;i<=qq;i++)
g<<sol[i]<<" ";
return 0;
}