Pagini recente » Cod sursa (job #2035294) | Cod sursa (job #2617995) | Istoria paginii utilizator/olarugeorgiana | Cod sursa (job #1962087) | Cod sursa (job #1489132)
#include<iostream>
#include<fstream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<bitset>
#include<cstring>
#include<queue>
#include<stack>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define FOR(a,b,c) for (int a=b;a<=c; ++a)
#define ROF(a,b,c) for (int a=b;a>=c; --a)
#define inf 5050
using namespace std;
ifstream f("subsir2.in");
ofstream g("subsir2.out");
int N;
int v[5010],best[5010],pre[5010];
void afiseaza(int);
int main()
{
f>>N;
FOR (i,1,N) {
f>>v[i];
}
best[1]=1;
pre[1]=0;
FOR (i,2,N) {
best[i]=inf;
int max1=0;
ROF (j,i-1,1) {
if (v[j]<=v[i] && v[j]>max1) {
max1=v[j];
if (best[j]<best[i]) {
best[i]=best[j];
pre[i]=j;
}
}
}
if (best[i]==inf) {
best[i]=1;
}
else {
++best[i];
}
}
/*
FOR (i,1,N) {
cout<<v[i]<<' ';
}
cout<<'\n';
FOR (i,1,N) {
cout<<best[i]<<' ';
}
cout<<'\n';
FOR (i,1,N) {
cout<<pre[i]<<' ';
}
*/
int j=N,dr=N;
int rez=best[N];
ROF (i,N-1,1) {
if (v[i]>v[j]) {
j=i;
if (best[j]<rez) {
rez=best[j];
dr=j;
}
}
}
g<<rez<<'\n';
afiseaza(dr);
f.close();g.close();
return 0;
}
void afiseaza(int x) {
if (pre[x]!=0) {
afiseaza(pre[x]);
}
g<<x<<' ';
}