Pagini recente » Cod sursa (job #1935818) | Cod sursa (job #2217664) | Cod sursa (job #1892714) | Cod sursa (job #1292590) | Cod sursa (job #846845)
Cod sursa(job #846845)
#include<fstream>
#define NMAX 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, m, a[NMAX], vz[NMAX], b[NMAX], nr[NMAX];
void Citeste()
{
int i;
f>>n;
for (i=1; i<=n; ++i) f>>a[i];
}
int cauta(int x)
{
int st=1, dr=m, mij, pz=m+1;
while (st<=dr)
{
mij=(st+dr)/2;
if (b[mij]>=x)
{
pz=mij;
dr=mij-1;
}
else st=mij+1;
}
return pz;
}
void Solve()
{
int i, c, mx=0, imx,j ;
vz[1]=1; b[1]=a[1]; m=1; nr[1]=1;
for (i=2; i<=n; ++i)
{
c=cauta(a[i]);
vz[i]=c;
b[c]=a[i];
nr[c]++;
if (m<c) ++m;
}
/*for (i=1; i<=m; ++i)
if (nr[i]>mx)
{
mx=nr[i];
imx=i;
}*/
g<<m<<"\n";
for (i=1; i<=n; ++i)
if (vz[i]==imx) g<<a[i]<<" ";
}
int main()
{
Citeste();
Solve();
f.close();
g.close();
return 0;
}