Pagini recente » Cod sursa (job #882856) | Cod sursa (job #1296547) | Cod sursa (job #846918) | Cod sursa (job #2353889) | Cod sursa (job #2964543)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("geana.in");
ofstream fout("geana.out");
int32_t main()
{
cin.tie(nullptr)->sync_with_stdio(false);
int n = 5;
vector<int> a(n + 1);
for (int i = 1; i <= n; ++i)
{
a[i] = i;
}
vector<int> dp(n + 1, INT_MAX);
vector<int> unde(n + 1);
map<int, int> last;
dp[0] = 0;
int ans = 0;
int qui = 0;
for (int i = 1; i <= n; ++i)
{
int st = 0, dr = i - 1;
int rep = 0;
while (st <= dr)
{
int mid = (st + dr) / 2;
if (dp[mid] < a[i])
{
rep = mid;
st = mid + 1;
}
else
{
dr = mid - 1;
}
}
dp[rep + 1] = min(dp[rep + 1], a[i]);
unde[i] = last[dp[rep]];
if (rep + 1 > ans)
{
ans = rep + 1;
qui = i;
}
last[a[i]] = i;
}
fout << ans << '\n';
vector<int> rep;
while (qui)
{
rep.push_back(qui);
qui = unde[qui];
}
assert((int)rep.size() == ans);
for (int i = 1; i < ans; ++i)
{
assert(a[rep[i]] > a[rep[i - 1]]);
}
reverse(rep.begin(), rep.end());
for (auto i : rep)
{
fout << i << ' ';
}
}