Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1040614) | Istoria paginii utilizator/dumitrur | Cod sursa (job #2202783)
#include <bits/stdc++.h>
#define NMAX 100005
using namespace std;
int capat[NMAX],vec[NMAX],v[NMAX];
int bs(int s,int e,int val)
{
int ans=0;
while(s<= e)
{
int mid=(s+e)/2;
if(capat[mid]<val)
{
ans=mid;
s=mid+1;
}
else
{
e=mid-1;
}
}
return ans;
}
int n,ma,lung,gata[NMAX];
void gen_sol(int *gata)
{
for(int i=n;i>=1;i--)
{
if(v[i]==ma)gata[++lung]=vec[i],ma--;
}
}
int i,x,k,poz;
int main()
{
ifstream fin("scmax.in");
ofstream fout("scmax.out");
fin>>n;
int k=0;
for(i=1;i<=n;i++)
{
fin>>vec[i];
x=vec[i];
poz=bs(0,k,x);
capat[poz+1]=x;
v[i]=poz+1;
ma=max(ma,v[i]);
k=max(k,poz+1);
}
gen_sol(gata);
fout<<lung<<"\n";
for(i=lung;i>=1;i--)
fout<<gata[i]<<" ";
return 0;
}