Pagini recente » Cod sursa (job #3251058) | Cod sursa (job #1650529) | Cod sursa (job #162883) | Cod sursa (job #1865053) | Cod sursa (job #2133025)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,m;
int v[100005];
int poz[100005];
int pred[100005];
int caut_bin(int k)
{
int i = 0, pas = 1<<30;
while (pas != 0) {
if (i + pas <= m && v[poz[i + pas]] < k) i+=pas;
pas/=2;
}
return i;
}
void afisare(int p)
{
if (pred[p] != 0)
afisare(pred[p]);
fout<<v[p]<<' ';
}
int main()
{
fin>>n;
for (int i = 1; i <= n; i++) {
fin>>v[i];
poz[i] = i;
}
for (int i = 1; i <= n; i++) {
int j = caut_bin(v[i]);
if (j == m) {
m++;
}
poz[j + 1] = i;
pred[i] = poz[j];
}
fout<<m<<'\n';
afisare(poz[m]);
}