| ||||||||||
| 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 | |||||||||
为什么我的输出和标程是吻合的,但结果还是wa??求管理员帮忙解释解释#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<iostream>
#include<queue>
#include<map>
#include<math.h>
using namespace std;
typedef long long ll;
//typedef __int64 int64;
const int maxn = 201005;
const int maxm = 100000;
const int inf = 99999999;
const double pi=acos(-1.0);
const double eps = 1e-8;
int a[ maxn ];
map<int,int>mp;
int cnt[ maxn ];
int bit[ 32 ];
int dp[ maxn ][ 32 ];
void init(){
mp.clear();
memset( dp,0,sizeof( dp ) );
memset( cnt,0,sizeof( cnt ));
}
void init_bit( ){
bit[ 0 ] = 1;
bit[ 1 ] = 2;
for( int i=2;i<32;i++ ){
bit[ i ] = 2*bit[ i-1 ];
//printf("bit[%d]=%d\n",i,bit[i]);
}
}
int fmax( int x,int y ){
if( cnt[ x ]>cnt[ y ] )
return x;
else return y;
}
void ST( int n ){
int k = (int)( log(1.0*n)/log(2.0) );
for( int i=0;i<=n;i++ )
dp[ i ][ 0 ] = i;
for( int j=1;j<=k;j++ ){
for( int i=1;i<=n-bit[j]+1;i++ ){
dp[ i ][ j ] = fmax( dp[ i ][ j-1 ],dp[ i+bit[ j-1 ] ][ j-1 ] );
}
}
}
int RMQ( int l,int r ){
if( l>r ) swap( l,r );
int k = (int)(log( (r-l+1)*1.0 )/log( 2.0 ));
//printf("k = %d\n",k);
//printf("s1=%d s2=%d\n",l,r-bit[k]+1);
return fmax( dp[ l ][ k ],dp[ r-bit[k]+1 ][ k ] );
}
int main(){
//freopen( "in.txt","r",stdin );
//freopen( "out.txt","w",stdout );
init_bit();
int n,q;
while( scanf("%d",&n)!=EOF ){
if( n==0 ) {
//printf("\n");
break;
}
scanf("%d",&q);
init();
cnt[ 0 ] = 0;
a[ 0 ] = inf;
a[ n+1 ] = inf;
for( int i=1;i<=n;i++ ){
scanf("%d",&a[ i ]);
mp[ a[i] ]++;
cnt[ i ] = mp[ a[i] ];
}
ST( n+1 );
int aa,bb;
while( q-- ){
scanf("%d%d",&aa,&bb);
int l = aa;
int r = bb;
if( a[ aa ]==a[ bb ] ){
printf("%d\n",bb-aa+1 );
continue;
}//
int flag = -1;
if( a[ aa ]==a[ aa-1 ] ){
while( a[ l ]==a[ aa ] ){
flag = l;
l++;
}
}
int ans = cnt[ RMQ( l,r ) ];
ans = max( ans,cnt[ flag ]-cnt[ aa-1 ] );
printf("%d\n",ans);
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator