Pagini recente » Cod sursa (job #3030368) | Cod sursa (job #190285) | Cod sursa (job #2952136) | Cod sursa (job #58124) | Cod sursa (job #173586)
Cod sursa(job #173586)
#include<stdio.h>
#include<algorithm>
using namespace std;
#define lg 10005
int n, i, mx, nr;
short sol[2][lg];
double v[lg], q[lg];
int find(double val){
int li = 1, ls = nr+1, gs = 0, x;
q[nr+1] = 100;
while (li <= ls){
x = (li+ls) / 2;
if (q[x] >= val){
gs = x;
ls = x-1;
}
else
li = x+1;
}
q[gs] = val;
if (gs == nr+1)
nr ++;
return gs;
}
void subsir(double v[lg], short sol[]){
sol[1] = 1;
q[1] = v[1];
nr = 1;
for (int i = 2; i <= n; i ++)
sol[i] = find(v[i]);
}
int main()
{
freopen("euro2.in", "rt", stdin);
freopen("euro2.out", "wt", stdout);
scanf("%d", &n);
for (i = 1; i <= n; i ++)
scanf("%lf", &v[i]);
subsir(v, sol[0]);
int x1 = 1, x2 = n;
while (x1 < x2){
swap(v[x1], v[x2]);
x1 ++, x2 --;
}
subsir(v, sol[1]);
/*
for (i = 1; i <= n; i ++)
printf("%d %d\n", sol[0][i], sol[1][n-i+1]);
*/
for (i = 1; i <= n; i ++)
if (sol[0][i] + sol[1][n-i+1] - 1 > mx && sol[0][i] > 1 && sol[1][n-i+1] > 1)
mx = sol[0][i] + sol[1][n-i+1] - 1;
printf("%d\n", mx);
return 0;
}