Pagini recente » Cod sursa (job #2442131) | Cod sursa (job #417667) | Cod sursa (job #2498035) | Cod sursa (job #1501899) | Cod sursa (job #2392616)
#include <bits/stdc++.h>
#define N_MAX 100002
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int INF = 2e9+1;
int n;
int v[N_MAX];
int dp[N_MAX], ind[N_MAX], pre[N_MAX];
void print (int pos)
{
if(pos == 0)
return;
print(pre[pos]);
fout << v[pos] << " ";
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
{
fin >> v[i];
dp[i] = INF;
}
int mx = 0, mxp = 0;
for(int i = 1; i <= n; i++)
{
int l = 0, r = n, mid;
while(l < r)
{
mid = (l + r) / 2;
if(dp[mid] <= v[i])
l = mid + 1;
else
r = mid;
}
if(v[i] < dp[l] && v[i] > dp[l - 1])
{
if(mx < l)
{
mx = l;
mxp = i;
}
dp[l] = v[i];
ind[l] = i;
pre[i] = ind[l - 1];
}
}
fout << mx << "\n";
print(mxp);
fout << "\n";
return 0;
}