Pagini recente » Cod sursa (job #3293960) | Cod sursa (job #2973431) | Cod sursa (job #143257) | Cod sursa (job #1449629) | Cod sursa (job #634088)
Cod sursa(job #634088)
#include <stdio.h>
#include <vector>
using namespace std;
int n;
vector <int> v;
vector <int> p;
vector <int> q;
void extract()
{
int ppoz=n-1;
int qpoz=q.size()-1;
while (qpoz>=0)
{
if (qpoz!=p[ppoz])
ppoz--;
else
{
q[qpoz]=v[ppoz];
qpoz--;
ppoz--;
}
}
}
void build(int x)
{
int l= q.size();
if (l==0) // q is empty
{
q.push_back(x);
}
else
{
l--;
if (x>q[l])
{
q.push_back(x);
l++;
}
else
{
while ((l>=0)&&(x<=q[l]))
l--;
q[++l]=x;
}
}
p.push_back(l);
}
void cit()
{
int x;
freopen("scmax.in","r",stdin);
scanf("%d",&n);
for (int i=0;i<n;i++)
{
scanf("%d",&x);
v.push_back(x);
build(x);
}
}
void afis()
{
freopen("scmax.out","w",stdout);
int dim =q.size();
printf("%d\n",dim);
for (int i=0;i<dim;i++)
printf("%d ",q[i]);
}
int main()
{
cit();
extract();
afis();
return 0;
}