Cod sursa(job #1133200)

Utilizator omerOmer Cerrahoglu omer Data 4 martie 2014 16:44:01
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#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;
}