Pagini recente » Cod sursa (job #1817535) | Cod sursa (job #888982) | Cod sursa (job #2770969) | Cod sursa (job #2376451) | Cod sursa (job #895415)
Cod sursa(job #895415)
#include<fstream>
using namespace std;
ifstream f("scmax.in"); ofstream g("scmax.out");
int a[100009], best[100009], n, pre[100009], maxim, poz;
int main()
{
// freopen("scmax.in", "rt", stdin); freopen("scmax.out", "wt", stdout);
// scanf("%d", &n);
f>>n;
for(int i = 1; i <= n; ++i) f>>a[i]; //scanf("%d", &a[i]);
best[n] = 1;
pre[n] = pre[0] = n + 1;
a[n + 1] = (1<<15) - 1;
for(int i = n - 1; i >= 1; --i)
{
best[i] = 1;
if(a[i] < a[i + 1])
{
best[i] += best[i + 1];
pre[i] = i + 1;
}
else
if(a[i] == a[i + 1])
if(a[i] < a[pre[i + 1]]) best[i] += best[pre[i + 1]], pre[i] = pre[i + 1];
if(maxim < best[i]) maxim = best[i], poz = i;
}
g<<maxim<<'\n';
//printf("%d\n", maxim);
for(int i = poz; i <= n; i = pre[i])
if(a[i]) g<<a[i]<<' ';//printf("%d ", a[i]);
g<<'\n';
g.close();
f.close();
return 0;
}
/*
#include <iostream>
#include <fstream>
using namespace std;
int n,x[100000],l[100000],ant[100000];
ofstream out("scmax.out");
void solutie (int p)
{
if(p>=0)
{
solutie(ant[p]);
out<<x[p]<<" ";
}
}
int main()
{
ifstream in("scmax.in");
in>>n;
int i,lmax,a,p,j;
for(i=0;i<n;i++)
in>>x[i];
in.close();
for(i=0;i<n;i++)
{
lmax=0;a=-1;
for(j=0;j<i;j++)
if(x[i]>x[j])
if(l[j]>lmax)
{lmax=l[j];a=j;}
l[i]=lmax+1;
ant[i]=a;
}
lmax=0;p=0;
for(i=0;i<n;i++)
if(l[i]>lmax){lmax=l[i];p=i;}
out<<lmax<<endl;
solutie(p);
out.close();
return 0;
}
*/