Pagini recente » Cod sursa (job #12436) | Cod sursa (job #16531) | Cod sursa (job #12437) | Cod sursa (job #188225) | Cod sursa (job #1133200)
#include <iostream>
#include<stdio.h>
using namespace std;
FILE *f,*g;
struct scm
{
int val,prev;
};
scm a[100001];
int best[100001];
int l,N,i,curr;
void query(int x)
{
if (a[x].val>a[best[l]].val) {l++;best[l]=x;a[x].prev=best[l-1];}
else
{
int left=0,right=l;
while (right>left+1)
{
if (a[x].val<=a[best[(left+right)/2]].val) right=(left+right)/2;
else left=(left+right)/2;
}
best[right]=x;
a[x].prev=best[left];
}
}
int main()
{
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
fscanf(f,"%d",&N);
for(i=1;i<=N;i++)
{
fscanf(f,"%d",&a[i].val);
query(i);
}
fprintf(g,"%d\n",l);curr=best[l];best[l]=a[best[l]].val;
for(i=l-1;i>=1;i--)
{
curr=a[curr].prev;
best[i]=a[curr].val;
}
for(i=1;i<=l;i++)
fprintf(g,"%d ",best[i]);
return 0;
}