Pagini recente » Cod sursa (job #2872375) | Cod sursa (job #343179) | Cod sursa (job #3038593) | Cod sursa (job #2771095) | Cod sursa (job #886701)
Cod sursa(job #886701)
#include <fstream>
#define NMAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int caut(int p, int u, int val);
int n,i,mijl,bst[NMAX],a[NMAX],poz[NMAX],p,u,v[NMAX],mmic;
int main()
{
int lg=1;
fin>>n;
for(i=1;i<=n;i++) fin>>a[i];
bst[1]=a[1];poz[1]=lg;
for(i=2;i<=n;i++)
{
mmic=caut (1, lg, a[i]);
if (mmic==-1) { bst[++lg]=a[i]; poz[i]=lg; }
else { bst[mmic]=a[i]; poz[i]=mmic; }
}
fout<<lg<<"\n";
int k=0;
for(i=n;i>0 && lg!=0;)
{
while(poz[i]!=lg) i--;
v[++k]=a[i];
lg--;
}
for(i=k;i>=1;i--)
fout<<v[i]<<" ";
}
int caut (int p, int u, int val) {
int m, bun, gasit=0;
while (p<=u) {
m=(p+u)/2;
if (bst[m]>=val) { u=m-1; bun=m; gasit=1; }
else p=m+1;
}
if (gasit) return bun;
return -1;
}