Pagini recente » Cod sursa (job #1614952) | Cod sursa (job #2456778) | Cod sursa (job #2729405) | Cod sursa (job #1461135) | Cod sursa (job #2794237)
#include<iostream>
#include<fstream>
using namespace std;
int lg[100005], n, i, j,x,mini=9999999,ind,v[100005],dp[100005],ans[100005];
int cautare(int st, int dr, int ind)
{
while (st <= dr) {
int mid = (st + dr) / 2;
if (v[ind] > v[lg[mid]]) st = mid + 1;
else dr = mid - 1;
}
return st;
}
int main()
{
ifstream cin("scmax.in");
ofstream cout("scmax.out");
cin >> n;
for (i = 1;i <= n;i++) {
cin >> v[i];
if (v[i] > v[lg[j]])
lg[++j] = i, dp[i] = j;
else if (v[i] < lg[1]) lg[1] = i, dp[i] = 1;
else {
x = cautare(1, j, i);
lg[x] = i;
dp[i] = x;
}
}
ans[1] = lg[j];
j = lg[j] - 1;
i = 1;
while (j)
{
if (dp[j] == dp[ans[i]] - 1)
{
ans[++i] = j;
}
j--;
}
cout << i << '\n';
for (j = i;1 <= j;j--)
cout << ans[j] << " ";
}