Pagini recente » Cod sursa (job #796153) | Cod sursa (job #1671605) | Cod sursa (job #905657) | Cod sursa (job #1404508) | Cod sursa (job #1494754)
#include <fstream>
#include <vector>
#define MaxN 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
vector<int> mylist;
int v[MaxN], TT[MaxN], best[MaxN];
int mybsearch(int x) {
int l = 1, u = mylist.size() - 1;
while (l <= u) {
int mid = l + (u - l) / 2;
if (v[mylist[mid - 1]] < x && x <= v[mylist[mid]]) {
return mid;
} else if (x < v[mylist[mid - 1]]) {
u = mid - 1;
} else {
l = mid + 1;
}
}
return mylist.size();
}
void show(int i) {
if (TT[i] != 0)
show(TT[i]);
fout << v[i] << ' ';
}
int main()
{
int N, x;
fin >> N;
mylist.push_back(0);
for (int i = 1; i <= N; ++i) {
fin >> x;
v[i] = x;
int poz = mybsearch(x);
if (poz == mylist.size())
mylist.push_back(i);
else
mylist[poz] = i;
best[i] = poz;
TT[i] = mylist[poz - 1];
}
int maxBest = 0, maxIndex = 0;
for (int i = 1; i <= N; ++i)
if (maxBest < best[i])
maxBest = best[i], maxIndex = i;
fout << maxBest << '\n';
show(maxIndex);
return 0;
}