Pagini recente » Cod sursa (job #2767113) | Cod sursa (job #2792446) | Cod sursa (job #1613336) | Cod sursa (job #2915659) | Cod sursa (job #1049606)
#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=1;i<=n;i++)
if(sol[P[i]]==0)
sol[P[i]]=v[P[i]];
//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;
}