Cod sursa(job #1293739)
Utilizator | Data | 16 decembrie 2014 14:50:48 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 45 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.16 kb |
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],a[100001],b[100001],dr,st,k,i,j,m,p,n,nr,c[100001];
int main()
{f>>n;
k=0;
for(i=1;i<=n;i++){
f>>v[i];
st=1;
dr=k;
p=0;
while(st<=dr){
m=(st+dr)/2;
if(v[i]<=a[m]){
p=m;
dr=m-1;}
else{
st=m+1;}
}
if(p==0){
k++;
a[k]=v[i];
b[i]=k;}
else
{
a[p]=v[i];
b[i]=p;
}}
g<<k<<'\n';
while(k>0)
for(i=n;i>=1;i--){
if(b[i]==k){
nr++;
c[nr]=v[i];
break;}
n=i;
k--;
}
for(i=nr;i>=1;i--)
g<<c[i]<<" ";
return 0;
}