Pagini recente » Cod sursa (job #365485) | Cod sursa (job #1499023) | Cod sursa (job #2345429) | Cod sursa (job #2653328) | Cod sursa (job #2176110)
#include <fstream>
#define N_MAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, arr[N_MAX], lsi[N_MAX], p[N_MAX];
int binarySearch(int low, int high, int x);
void solve();
int main()
{
fin >> n;
for (int i = 0; i < n; i++)
fin >> arr[i];
solve();
return 0;
}
int binarySearch(int low, int high, int x)
{
while (low <= high)
{
int mid = low + (low - high) / 2;
if (arr[lsi[mid]] < x)
low = mid + 1;
else
high = mid - 1;
}
return low;
}
void solve()
{
int len = 0;
lsi[0] = arr[0];
for (int i = 0; i <= n; i++)
{
int pos = binarySearch(1, len, arr[i]);
// update parent for LIS
p[i] = lsi[pos-1];
// replace or append
lsi[pos] = i;
// update length of lsi
if (pos > len)
len = pos;
}
fout << len << "\n";
}