Pagini recente » Cod sursa (job #3275586) | Cod sursa (job #3188697) | Cod sursa (job #2653789) | Cod sursa (job #152185) | Cod sursa (job #3139117)
#include <fstream>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int sir[100001] , tata[100001] , pozitii[100001] , optiuni[100001];
void Afisare (const int indice)
{
if (tata[indice])
Afisare(tata[indice]);
cout << sir[indice] << ' ';
}
int main ()
{
int lungime;
cin >> lungime;
int lungime_optiuni = 0;
for (int indice = 1 ; indice <= lungime ; indice++)
{
cin >> sir[indice];
int pozitie = 0 , putere = 1;
while ((putere << 1) <= lungime_optiuni)
putere <<= 1;
while (putere)
{
if ((pozitie | putere) <= lungime_optiuni && optiuni[(pozitie | putere)] < sir[indice])
pozitie |= putere;
putere >>= 1;
}
if (pozitie == lungime_optiuni)
lungime_optiuni++;
tata[indice] = pozitii[++pozitie - 1];
optiuni[pozitie] = sir[indice];
pozitii[pozitie] = indice;
}
cout << lungime_optiuni << '\n';
Afisare(pozitii[lungime_optiuni]);
cout.close(); cin.close();
return 0;
}