Pagini recente » Cod sursa (job #2935316) | Cod sursa (job #2999174) | Cod sursa (job #2143029) | Cod sursa (job #787809) | Cod sursa (job #3200288)
#include <fstream>
#include <algorithm>
#include <climits>
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int n, maxi[5005], a[5005], k;
int dp[5005], v[5005], fr[5005];
int main()
{
f >> n;
for(int i = 1; i <= n; i ++)
f >> a[i];
for(int i = 1; i <= n; i ++)
{
int p = upper_bound(maxi + 1, maxi + k + 1, a[i]) - maxi;
if(p > k)
{
k ++;
fr[k] = i;
}
maxi[p] = a[i];
dp[i] = p;
}
g << k << '\n';
int u = INT_MAX; v[k + 1] = n;
for(int i = k; i >= 1; i --)
{
int mini = INT_MAX, poz;
for(int j = v[i + 1]; j >= fr[i - 1]; j --)
if(dp[j] == i && mini > a[j] && u >= a[j])
{
mini = a[j];
poz = j;
}
v[i] = poz;
}
for(int i = 1; i <= k; i ++)
g << v[i] << " ";
return 0;
}