Pagini recente » Cod sursa (job #1046944) | Cod sursa (job #2137574) | Cod sursa (job #1956035) | Cod sursa (job #1785106) | Cod sursa (job #1089087)
#include <fstream>
#define NMAX 100005
using namespace std;
int a[NMAX],best[NMAX],poz[NMAX];
int n,x;
int cautare_binara(int,int,int);
int main()
{
int i;
FILE * fin=fopen("scmax.in","r");
FILE * fout=fopen("scmax.out","w");
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&a[i]);
poz[1]=1;
best[1]=a[1];
best[0]=1;//contor cati am.
for(i=2;i<=n;i++)
{
poz[i]=cautare_binara(1,best[0],a[i]);
}
fprintf(fout,"%d\n",best[0]);
int z=0,s[NMAX];
for(i=n;i>=1;i--)
if(poz[i]==best[0])
{
z++;
s[z]=a[i];
best[0]--;
}
for(i=z;i>=1;i--)
fprintf(fout,"%d ",s[i]);
fclose(fin);
fclose(fout);
return 0;
}
int cautare_binara(int st,int dr,int val)
{
int mij;
if(val>best[best[0]])
{
best[0]++;
best[best[0]]=val;
return best[0];
}
while(st<dr)
{
mij=(st+dr)/2;
if(val<best[mij]) dr=mij;
else st=mij+1;
}
best[dr]=val;
return dr;
}