Pagini recente » Cod sursa (job #448926) | Cod sursa (job #1712865) | Cod sursa (job #1767860) | Cod sursa (job #1196073) | Cod sursa (job #2176050)
#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);
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)
{
if (high >= low)
{
int mid = low + (high - low) / 2;
if (arr[mid] == x)
return mid;
if (arr[mid] > x)
return binarySearch(low, mid-1, x);
return binarySearch(mid+1, high, x);
}
return -1;
}
void solve()
{
int len = 0;
for (int i = 0; i < n; i++)
{
int pos = binarySearch(0, n-1, arr[i]);
// update parent for lis
p[i] = lsi[pos-1];
// replace or append
lsi[pos] = i;
if (pos > len)
len = pos;
}
fout << len-1 << "\n";
}