找到一个区间内出现最多的数的次数
10 3 //10个数字三次询问-1 -1 1 1 1 1 3 10 10 102 3 1 105 100 1 4 3
1 #include2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 const int maxn=1005; 9 int n,m;10 const int MAXN = 100010;11 int dp[MAXN][20];12 int mm[MAXN];13 int a[MAXN],b[MAXN];14 //初始化RMQ, b数组下标从1开始,从0开始简单修改15 void makeRMQ(int n,int b[])16 {17 for(int i=0;i >1);37 if(a[mid]>=tmp)r=mid;38 else l=mid+1;39 }40 return r;41 }42 int main()43 {44 int i,j,k;45 #ifndef ONLINE_JUDGE46 freopen("1.in","r",stdin);47 #endif48 int q;49 while(scanf("%d",&n)!=EOF)50 {51 if(n==0) break;52 scanf("%d",&q);53 for(i=0;i =0;i--)56 {57 if(i==n-1) tmp=1;58 else59 {60 if(a[i]==a[i+1]) tmp++;61 else tmp=1;62 }63 b[i]=tmp;64 }65 makeRMQ(n,b);66 while(q--)67 {68 int s,t;69 scanf("%d%d",&s,&t);70 s--,t--;71 int temp=bi_search(s,t);72 int ans=t-temp+1;73 t=temp-1;74 if(s>t) printf("%d\n",ans); //从s到t的数字都相同75 else printf("%d\n",max(ans,rmq(s,t)));76 }77 }78 }