Pagini recente » Cod sursa (job #1315480) | Cod sursa (job #193325) | Cod sursa (job #744469) | Cod sursa (job #2246789) | Cod sursa (job #2945640)
#include <fstream>
#define NMAX 100004
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("smax.out");
struct element
{
int val, poz, lg;
}dp[NMAX], nou;
int tata[NMAX], a[NMAX], rez[NMAX];
int n, i, j, nr, lgmax, imax, poz;
void cb (int x, int poz);
int main()
{
fin>>n;
for (i=1; i<=n; i++)
{
fin>>a[i];
cb(a[i], i);
}
fout<<lgmax<<'\n';
poz=dp[imax].poz; i=0;
while (poz)
{
rez[++i]=a[poz];
poz=tata[poz];
}
for (i=lgmax; i>=1; i--)
fout<<rez[i]<<' ';
return 0;
}
void cb (int x, int poz)
{
int st, dr, mij;
element nou;
st=0; dr=nr+1;
while (dr-st > 1)
{
mij=(st+dr)/2;
if (dp[mij].val < x)
dr=mij;
else
st=mij;
}
nou.lg=dp[dr].lg+1;
nou.val=x;
nou.poz=poz;
tata[poz]=dp[dr].poz;
dp[dr]=nou;
if (dr > nr)
nr++;
if (dp[dr].lg > lgmax)
{
lgmax=dp[dr].lg;
imax=dr;
}
}