Pagini recente » Cod sursa (job #2844024) | Cod sursa (job #295543) | Cod sursa (job #1501035) | Cod sursa (job #995200) | Cod sursa (job #1329282)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, scmax;
int x[100010], v[100010], t[100010];
int cautbin (int nr) {
int st = 1, dr = scmax;
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[x[mid]] >= nr)
dr = mid - 1;
else
st = mid + 1;
}
return st;
}
void scrie (int nr) {
if (nr == 0)
return;
scrie (t[nr]);
fout << v[nr] << " ";
}
int main () {
fin >> n;
for(int i = 1; i <= n; i++)
fin >> v[i];
x[++scmax] = 1;
for (int i = 2; i <= n; i++) {
int poz = cautbin(v[i]);
if (poz > scmax)
scmax++;
x[poz] = i;
t[i] = x[poz - 1];
}
fout << scmax << "\n";
scrie(x[scmax]);
return 0;
}