Cod sursa(job #1985116)

Utilizator DragosArseneDragos Arsene DragosArsene Data 26 mai 2017 22:25:35
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.07 kb
#include <iostream>
#include<stdio.h>
using namespace std;
double v[10001], q[10001];
int best1[100001], best2[10001];
int main() {
    FILE *fin, *fout;
    int n, i, maxim=1, stg, dr, mijl, steag, j, poz, sol, pos, max;
    double x;

fin = fopen("euro2.in", "r");
fout = fopen("euro2.out", "w");

fscanf(fin,"%d", &n);
max=3;
poz=1;
for(i=1;i<=n;i++){
    fscanf(fin,"%lf", &v[i]);

}
q[1]=v[1];
maxim=1;
best1[1]=1;
q[0]=5;
for(i=2;i<=n;i++){
    stg=0;
    x=v[i];
    dr=maxim;
    mijl=(dr+stg)/2;
    steag=1;
    if(x>q[maxim]){
        maxim++;
    q[maxim]=x;
    best1[i]=maxim;
    }
    if(x==q[maxim])
    steag=0;
    else{
    if(x==q[mijl])
            steag=0;
    while(dr-stg>1&&steag==1){
        if(x==q[mijl])
            steag=0;
        if(x>=q[mijl]){
            stg=mijl;
        }
        if(x<q[mijl]){
            dr=mijl;
        }

        mijl=(dr+stg)/2;
    }
    if(steag==1)
    q[mijl+1]=x;
    best1[i]=mijl+1;
    }
}
j=1;

for(i=1;i<=n;i++){
if(best1[i]>maxim)
maxim=best1[i];
}
for(i=1;i<=maxim;i++){
q[i]=0;
}



q[1]=v[n];
maxim=1;
best2[n]=1;
q[0]=5;
for(i=n;i>=1;i--){
    stg=0;
    x=v[i];
    dr=maxim;
    mijl=(dr+stg)/2;
    steag=1;
    if(x>q[maxim]){
        maxim++;
    q[maxim]=x;
    best2[i]=maxim;
    }
    if(x==q[maxim])
    steag=0;
    else{
    if(x==q[mijl])
            steag=0;
    while(dr-stg>1&&steag==1){
        if(x==q[mijl])
            steag=0;
        if(x>q[mijl]){
            stg=mijl;
        }
        if(x<q[mijl]){
            dr=mijl;
        }

        mijl=(dr+stg)/2;
    }
    if(steag==1)
    q[mijl+1]=x;
    best2[i]=mijl+1;
    }
}
j=1;

for(i=n;i>=1;i--){
if(best2[i]>maxim)
maxim=best2[i];
}
for(i=1;i<=maxim;i++){
q[i]=0;
}
max=0;

for(i=1;i<=n;i++){
if(best1[i]>max)
max=best1[i];
}
for(i=1;i<=n;i++){
}
sol=1;
for(i=1;i<=n;i++){
if(best1[i]>1&&best2[i]>1&&best1[i]+best2[i]-1>=sol){
sol=best1[i]+best2[i]-1;

}

}

fprintf(fout,"%d", sol);
fclose(fin);
fclose(fout);
    return 0;
}