Pagini recente » Cod sursa (job #1396877) | Cod sursa (job #2900059) | Cod sursa (job #2559978) | Cod sursa (job #2808578) | Cod sursa (job #2205275)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
struct siruri{int val;vector<int> vv;}v[100003];
int n,nr,i,lv,mx=0,mxpoz;
int caut(int nr)
{
int in=1,sf=lv,mij;
if(nr>v[0].val)return 0;
if(nr<v[sf].val)return sf+1;
while(in<sf)
{
mij=(in+sf)/2;
if(nr>v[mij].val && nr<=v[mij-1].val)return mij;
else if(nr>v[mij-1].val)in=mij-1;
else if(nr<v[mij].val)sf=mij+1;
}
return in;
}
int main()
{
f>>n;
f>>nr;
v[1].val=nr;lv=1;
v[1].vv.push_back(nr);
for(i=2;i<=n;i++)
{
f>>nr;
int poz=caut(nr);
if(poz==lv+1)lv++;
v[poz].val=nr;
v[poz].vv.push_back(nr);
if(v[poz].vv.size()>mx)
{
mx=v[poz].vv.size();
mxpoz=poz;
}
}
g<<mx<<'\n';
for(i=0;i<v[mxpoz].vv.size();i++)
g<<v[mxpoz].vv[i]<<" ";
}