/*
Name:
Copyright: DHKHTN - DHQGHN
Author: Nguyen Dinh Nhat
Date: 26/07/10 21:40
Description:
SPSEQ
https://v...content-available-to-author-only...j.pl/problems/SPSEQ/
*/
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
#define TI freopen("test.inp","rt",stdin)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FORD(i,a,b) for(int i=a;i>=b;i--)
#define REP(i,n) for(int i=0;i<n;i++)
#define MAX 100005
int F[ 3 ] [ MAX] ,A[ MAX] ,start_of[ MAX] ;
int m_t= 0 ,m_g= 0 ,N;
void decode ( ) {
scanf ( "%d\n " ,& N) ;
FOR ( i,1 ,N)
scanf ( "%d" ,& A[ i] ) ;
}
int tim_t ( int i) {
int truoc= 0 ,sau= m_t+ 1 ,hientai;
do {
hientai= ( truoc+ sau) / 2 ;
if ( A[ start_of[ hientai] ] < A[ i] ) truoc= hientai;
else sau= hientai;
} while ( sau! = truoc+ 1 ) ;
return truoc;
}
// luu chi so vao trong th giam
int tim_g ( int i) {
int truoc= 0 ,sau= m_g+ 1 ,hientai,j;
while ( sau! = truoc+ 1 ) {
hientai= ( truoc+ sau) / 2 ;
if ( A[ start_of[ hientai] ] > A[ i] ) truoc= hientai;
else sau= hientai;
}
return truoc;
}
void SPSEQ ( ) {
int Max= 0 ,j,rs= 0 ;
// xet truong hop tang
FOR ( i,1 ,N) {
j= tim_t ( i) + 1 ;
F[ 0 ] [ i] = j;
if ( j> m_t) {
m_t= j;
start_of[ j] = i;
}
else if ( A[ i] < A[ start_of[ j] ] ) {
start_of[ j] = i;
}
}
FOR ( i,1 ,N) start_of[ i] = 0 ;
// xet truong hop giam
FOR ( i,1 ,N) {
j= tim_g ( i) + 1 ;
F[ 1 ] [ i] = j- 1 ;
if ( j> m_g) {
m_g= j;
start_of [ j] = i;
}
else if ( A[ i] > A[ start_of[ j] ] )
start_of [ j] = i;
// tim Max là chi so lon nhat
if ( A[ i] >= A[ Max] ) Max= i;
F[ 2 ] [ i] = max( F[ 0 ] [ i] ,F[ 1 ] [ i] + F[ 0 ] [ Max] ) ;
rs= max( rs,F[ 2 ] [ i] ) ;
}
cout << rs<< endl;
}
//#include <conio.h>
int main ( )
{
// TI;
decode ( ) ;
SPSEQ ( ) ;
// getch ();
return 0 ;
}
LyoKICBOYW1lOgogIENvcHlyaWdodDogREhLSFROIC0gREhRR0hOCiAgQXV0aG9yOiBOZ3V5ZW4gRGluaCBOaGF0CiAgRGF0ZTogMjYvMDcvMTAgMjE6NDAKICBEZXNjcmlwdGlvbjogCgkJU1BTRVEKCQlodHRwczovL3YuLi5jb250ZW50LWF2YWlsYWJsZS10by1hdXRob3Itb25seS4uLmoucGwvcHJvYmxlbXMvU1BTRVEvCiovCgoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxhbGdvcml0aG0+CiNpbmNsdWRlIDx2ZWN0b3I+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIFRJIGZyZW9wZW4oInRlc3QuaW5wIiwicnQiLHN0ZGluKQoKI2RlZmluZSBGT1IoaSxhLGIpIGZvcihpbnQgaT1hO2k8PWI7aSsrKQojZGVmaW5lIEZPUkQoaSxhLGIpIGZvcihpbnQgaT1hO2k+PWI7aS0tKQojZGVmaW5lIFJFUChpLG4pIGZvcihpbnQgaT0wO2k8bjtpKyspCgojZGVmaW5lIE1BWCAxMDAwMDUKCmludCBGWzNdW01BWF0sQVtNQVhdLHN0YXJ0X29mW01BWF07CmludCBtX3Q9MCxtX2c9MCxOOwoKCnZvaWQgZGVjb2RlICgpewoJc2NhbmYgKCIlZFxuIiwmTik7CglGT1IgKGksMSxOKQoJCXNjYW5mICgiJWQiLCZBW2ldKTsKfQoKaW50IHRpbV90IChpbnQgaSl7CglpbnQgdHJ1b2M9MCxzYXU9bV90KzEsaGllbnRhaTsKCWRvIHsKCQloaWVudGFpPSh0cnVvYytzYXUpLzI7CgkJaWYgKEFbc3RhcnRfb2ZbaGllbnRhaV1dPEFbaV0pIHRydW9jPWhpZW50YWk7CgkJZWxzZSBzYXU9aGllbnRhaTsKCQkKCX13aGlsZSAoc2F1IT10cnVvYysxKTsKCXJldHVybiB0cnVvYzsKfQoKLy8gbHV1IGNoaSBzbyB2YW8gdHJvbmcgdGggZ2lhbQppbnQgdGltX2cgKGludCBpKXsKCWludCB0cnVvYz0wLHNhdT1tX2crMSxoaWVudGFpLGo7Cgl3aGlsZSAoc2F1IT10cnVvYysxKXsKCQloaWVudGFpPSh0cnVvYytzYXUpLzI7CgkJaWYgKEFbc3RhcnRfb2ZbaGllbnRhaV1dPkFbaV0pIHRydW9jPWhpZW50YWk7CgkJZWxzZSBzYXU9aGllbnRhaTsKCX0KCXJldHVybiB0cnVvYzsKfQoKdm9pZCBTUFNFUSAoKXsKCWludCBNYXg9MCxqLHJzPTA7CgkvLyB4ZXQgdHJ1b25nIGhvcCB0YW5nCglGT1IgKGksMSxOKXsKCQlqPXRpbV90IChpKSsxOwoJCUZbMF1baV09ajsKCQlpZiAoaj5tX3QpewoJCQltX3Q9ajsKCQkJc3RhcnRfb2Zbal09aTsKCQl9CgkJZWxzZSBpZiAoQVtpXTxBW3N0YXJ0X29mW2pdXSl7CgkJCXN0YXJ0X29mW2pdPWk7CgkJfQoJfQoJRk9SIChpLDEsTikgc3RhcnRfb2ZbaV09MDsKCS8vIHhldCB0cnVvbmcgaG9wIGdpYW0KCUZPUiAoaSwxLE4pewoJCWo9dGltX2cgKGkpKzE7CgkJRlsxXVtpXT1qLTE7CgkJaWYgKGo+bV9nKXsKCQkJbV9nPWo7CgkJCXN0YXJ0X29mIFtqXT1pOwoJCX0KCQllbHNlIGlmIChBW2ldPkFbc3RhcnRfb2Zbal1dKQoJCQlzdGFydF9vZiBbal09aTsKCQkvLyB0aW0gTWF4IGzDoCBjaGkgc28gbG9uIG5oYXQgCgkJaWYgKEFbaV0+PUFbTWF4XSkgTWF4PWk7CgkJRlsyXVtpXT1tYXgoRlswXVtpXSxGWzFdW2ldK0ZbMF1bTWF4XSk7CgkJcnM9bWF4KHJzLEZbMl1baV0pOwkKCX0KICAgICAgICAKCWNvdXQ8PHJzPDxlbmRsOwp9CgoKLy8jaW5jbHVkZSA8Y29uaW8uaD4KaW50IG1haW4gKCkKewovLwlUSTsKCWRlY29kZSAoKTsKCVNQU0VRICgpOwovLwlnZXRjaCAoKTsKICAgIHJldHVybiAwOwp9Cg==
compilation info
prog.cpp: In function ‘void decode()’:
prog.cpp:33: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
prog.cpp:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result
prog.cpp: In function ‘int tim_g(int)’:
prog.cpp:51: warning: unused variable ‘j’
stdout