Pagini recente » Cod sursa (job #2041257) | Cod sursa (job #1936107) | Cod sursa (job #901947) | Cod sursa (job #1091931) | Cod sursa (job #1803675)
#include <fstream>
#define nMax 100007
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n, sayi, v[nMax], q[nMax], d[nMax], cevap[nMax], tmp[nMax], dr ,st, poz, uzunluk;
int main()
{
in >> n;
for(int i = 1; i <= n; ++i)
in >> v[i];
for(int i = 1; i <= n; ++i)
{
st = 1;
dr = sayi;
while(st <= dr)
{
int mid = (st + dr) / 2;
if(v[q[mid]] >= v[i])
dr = mid - 1;
else
st = mid + 1;
}
d[i] = d[q[st - 1]] + 1;
tmp[i] = q[st - 1];
if(st == sayi + 1)
++sayi;
q[st] = i;
}
for(int i = 1; i <= n; ++i)
{
if(d[i] > d[poz])
poz = i;
}
for(int i = poz; i > 0; i = tmp[i])
{
cevap[++uzunluk] = v[i];
}
out << uzunluk << "\n";
for(int i = uzunluk; i > 0; --i)
{
out << cevap[i] << " ";
}
}