Pagini recente » Istoria paginii runda/exersare1 | Cod sursa (job #1659999) | Cod sursa (job #2599984) | Cod sursa (job #655510) | Cod sursa (job #2352188)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100005],b[100005],n,i,poz,lung[100005],maxim;
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&&maxim;j--)
{
if (lung[j]==maxim&&v[j]<=v[k])
{
maxim--;
drum(j);
g<<v[j]<<" ";
}
}
}int k;
int main()
{
f>>n;
for (i=1;i<=n;i++)
{
f>>v[i];
}
for (i=1;i<=n;i++)
{
b[i]=2000000005;
}
for (i=1;i<=n;i++)
{
poz=cautbin(v[i]);
if (v[i]<b[poz+1])
{
b[poz+1]=v[i];
lung[i]=poz+1;
}
if (lung[i]>maxim)
{
maxim=lung[i];
k=i;
}
}
g<<maxim<<'\n';
drum(k);
return 0;
}