Mai intai trebuie sa te autentifici.
Cod sursa(job #780620)
| Utilizator | Data | 20 august 2012 21:31:47 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 65 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.77 kb |
#include <cstdio>
#include <algorithm>
using namespace std;
#define Max 100001
int n,v[Max],bst[Max],c[Max],k;
int c_bin(int l,int r,int x){
int m;
while(l < r)
{
m = (l+r)/2;
if( c[m] >= x )r = m; else l = m+1;
}
if(r > k)k = r;
c[r] = x;
return r;
}
void tipar(int n){
if(k > 0)
for(int i=n;i>0;i--)
if( bst[i] == k )
{
k--;
tipar(n-1);
printf("%d\n",v[i]);
return ;
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&v[i]);
for(int i=1;i<=n;i++)bst[i] = c_bin(1,k+1,v[i]);
printf("%d\n",k);
tipar(n);
//for(int i=1;i<=n;i++)printf("%d ",bst[i]);
return 0;
}
