Pagini recente » Cod sursa (job #3159827) | Cod sursa (job #2575323) | Cod sursa (job #1286395) | Cod sursa (job #3260447) | Cod sursa (job #3167588)
#include <iostream>
#include <fstream>
using namespace std;
int n, sir[100005], sol[100005],ind[100005],maxim,k=1;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void cautare(int x,int i) {
int dr=k,st=1,mij=(dr+st)/2, poz=k+1;
while (st<=dr) {
mij=(dr+st)/2;
if (sol[mij]>=x) {
poz=mij;
dr=mij-1;
}
else {
st=mij+1;
}
sol[poz]=x;
ind[i]=poz;
}
}
int main()
{
fin >> n;
for (int i=1; i<=n; ++i) {
fin >> sir[i];
}
//sol[0]=-1;
sol[1]=sir[1];
ind[1]=1;
for (int i=1; i<=n; ++i) {
if (sir[i]>sol[k]) {
++k;
sol[k]=sir[i];
ind[i]=k;
}
else {
cautare(sir[i],i);
}
}
fout << k << '\n';
for (int i=1; i<=k; ++i) {
fout << sol[i] << ' ';
}
return 0;
}