Pagini recente » Cod sursa (job #754699) | Cod sursa (job #411723) | Cod sursa (job #2162434) | Cod sursa (job #801611) | Cod sursa (job #2438889)
#include <iostream>
#include <fstream>
std::ifstream f("scmax.in");
std::ofstream g("scmax.out");
const int NMAX = 10005;
int n,v[NMAX],dp[NMAX];
int binary(int left,int right,int *v,int value)
{
while (left <= right)
{
int mid = (left + right) / 2;
if(v[mid] < value)
left = mid + 1;
else right = mid - 1;
}
return left;
}
void lis()
{
int len{};// len of the dp array
for(int i = 1;i <= n;i++)
{
int pos = binary(1,len,dp,v[i]);
if(pos > len)
len = pos;
dp[pos] = v[i];
}
g << len << '\n';
}
int main()
{
f >> n;
for(int i = 1;i <= n;i++)
f >> v[i];
lis();
f.close();
g.close();
return 0;
}