| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
线段树区间合并也可以的,虽然效率不高,但至少也是一种思想吧#include<stdio.h>
#include<string.h>
#define lson l , m , rt<<1
#define rson m + 1 , r , rt<<1|1
const int maxn = 100005 ;
int lmax[maxn<<2] , rmax[maxn<<2] , mmax[maxn<<2] , lp[maxn<<2] , rp[maxn<<2] ;
int max ( int a , int b ) { return a > b ? a : b ; }
void push_up ( int rt , int m )
{
mmax[rt] = max ( mmax[rt<<1] , mmax[rt<<1|1] ) ;
lmax[rt] = lmax[rt<<1] , rmax[rt] = rmax[rt<<1|1] ;
lp[rt] = lp[rt<<1] , rp[rt] = rp[rt<<1|1] ;
if ( rp[rt<<1] == lp[rt<<1|1] ) mmax[rt] = max ( mmax[rt] , rmax[rt<<1] + lmax[rt<<1|1] ) ;
if ( lmax[rt<<1] == m - (m>>1) && rp[rt<<1] == lp[rt<<1|1] ) lmax[rt] += lmax[rt<<1|1] ;
if ( rmax[rt<<1|1] == m>>1 && rp[rt<<1] == lp[rt<<1|1] ) rmax[rt] += rmax[rt<<1] ;
}
void build ( int l , int r , int rt )
{
if ( l == r )
{
int a ;
scanf ( "%d" , &a ) ;
mmax[rt] = lmax[rt] = rmax[rt] = 1 ;
lp[rt] = rp[rt] = a ;
return ;
}
int m = ( l + r ) >> 1 ;
build ( lson ) ;
build ( rson ) ;
push_up ( rt , r - l + 1 ) ;
}
int query ( int a , int b , int l , int r , int rt )
{
if ( a <= l && r <= b ) { return mmax[rt] ; }
int ret = 0 ;
int m = ( l + r ) >> 1 ;
if ( a <= m ) ret = max ( ret , query ( a , b , lson ) ) ;
if ( m < b ) ret = max ( ret , query ( a , b , rson ) ) ;
if ( rp[rt<<1] == lp[rt<<1|1] && a <= m && m < b )
{
int x = rmax[rt<<1] ; int y = lmax[rt<<1|1] ;
if ( m - x + 1 <= a - 1 ) x = m - a + 1 ;
if ( m + y >= b + 1 ) y = b - m ;
ret = max ( ret , x + y ) ;
}
return ret ;
}
int main ()
{
int n , q ;
while ( scanf ( "%d" , &n ) != EOF )
{
if ( n == 0 ) break ;
scanf ( "%d" , &q ) ;
build ( 1 , n , 1 ) ;
while ( q -- )
{
int x , y ;
scanf ( "%d%d" , &x , &y ) ;
if ( x == y )
{
puts ( "1" ) ;
continue ;
}
printf ( "%d\n" , query ( x , y , 1 ,n , 1 ) ) ;
}
}
return 0 ;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator