Cod sursa(job #484346)
| Utilizator | Data | 13 septembrie 2010 19:25:31 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 65 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.55 kb |
#include<fstream>
#define M 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int main()
{
int v[M],l[M];
int n,k,i,j,m,p,pp;
f>>n;
p=0;
for(k=1;k<=n;++k)
{
f>>v[k];
i=1;
j=p;
pp=0;
while(i<=j)
{
m=(i+j)/2;
if(l[m]>v[k]) {pp=m;
j=m-1;}
else if(l[m]<v[k]) i=m+1;
else {pp=m;
break;}
}
if(pp==0) {++p;
pp=p;}
l[pp]=v[k];
}
g<<p<<"\n";
for(i=1;i<=p;++i)
g<<l[i]<<" ";
g<<"\n";
f.close();
g.close();
return 0;
}