Pagini recente » Cod sursa (job #391250) | Cod sursa (job #1348601) | Cod sursa (job #557233) | Cod sursa (job #1860565) | Cod sursa (job #2344782)
#include <iostream>
#include <fstream>
#define MAX 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
int arr[MAX];
int lis[MAX];
int parent[MAX];
int len;
int main()
{
fin >> n;
for (int i = 1; i <= n; ++i)
fin >> arr[i];
///////
len = 1;
lis[1] = 1;
parent[1] = -1;
for (int i = 2; i <= n; i++)
{
if (arr[i] > arr[lis[len]])
{
parent[i] = lis[len];
len++;
lis[len] = i;
}
else if (arr[i] < arr[lis[1]])
{
parent[i] = -1;
lis[1] = i;
}
else
{
int low = 1;
int high = len;
while (low <= high)
{
int mid = (low + high) / 2;
if (arr[lis[mid]] < arr[i])
high = mid - 1;
else
low = mid + 1;
}
lis[low] = i;
parent[i] = lis[low - 1];
}
}
fout << len;
return 0;
}