Pagini recente » Cod sursa (job #829678) | Cod sursa (job #1190097) | Cod sursa (job #601515) | Cod sursa (job #479145) | Cod sursa (job #2476220)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005],b[100005],n,i,poz,lung[100005],sol;
int cautbin (int x)
{
int st=1,dr=n,mij;
while (st<=dr)
{
mij=(st+dr)/2;
if (x>b[mij])
{
st=mij+1;
}
else
{
dr=mij-1;
}
}
return dr;
}
void drum (int k)
{
int j;
for (j=k; j>=1 && sol; j--)
{
if (lung[j]==sol && a[j]<=a[k])
{
sol--;
drum(j);
g<<a[j]<<" ";
}
}
}
int k;
int main()
{
f>>n;
for (i=1; i<=n; i++)
{
f>>a[i];
}
for (i=1; i<=n; i++)
{
b[i]=2000000005;
}
for (i=1; i<=n; i++)
{
poz=cautbin(a[i]);
if (a[i]<b[poz+1])
{
b[poz+1]=a[i];
lung[i]=poz+1;
}
if (lung[i]>sol)
{
sol=lung[i];
k=i;
}
}
g<<sol<<'\n';
drum(k);
return 0;
}