Pagini recente » Cod sursa (job #1763657) | Cod sursa (job #2331878) | Cod sursa (job #2403676) | Cod sursa (job #710131) | Cod sursa (job #2438890)
#include <iostream>
#include <fstream>
std::ifstream f("scmax.in");
std::ofstream g("scmax.out");
const int NMAX = 100005;
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';
for(int i = 1;i <= len;i++)
g << dp[i] << " ";
}
int main()
{
f >> n;
for(int i = 1;i <= n;i++)
f >> v[i];
lis();
f.close();
g.close();
return 0;
}