codeforces6E Exposition 二分+RMQ
2014-12-01 10:52
183 查看
codeforces6E Exposition
题意:有n本书各有一定高度,选出最长的连续的一段,其中最高和最矮的差不超过k,若有多组,都输出。
分析:二分长度,需快速得到某段最大值和最小值的差值,用RMQ。
题意:有n本书各有一定高度,选出最长的连续的一段,其中最高和最矮的差不超过k,若有多组,都输出。
分析:二分长度,需快速得到某段最大值和最小值的差值,用RMQ。
#include<iostream> #include<string> #include<cstring> #include<cstdio> #include<cmath> #include<iomanip> #include<map> #include<algorithm> #include<queue> #include<set> #define inf 10000000 #define pi acos(-1.0) #define eps 1e-8 #define seed 131 typedef unsigned long long ULL; typedef long long LL; using namespace std; const int maxn=100005; int n,k; int cnt; int len; int go[maxn][2]; int A[maxn]; int mx[maxn][20],mi[maxn][20]; int query(int a,int b) { int k=log2(b-a+1); int mmx=max(mx[a][k],mx[b-(1<<k)+1][k]); int mmi=min(mi[a][k],mi[b-(1<<k)+1][k]); return mmx-mmi; } int main() { scanf("%d%d",&n,&k); for(int i=1;i<=n;i++) scanf("%d",&A[i]); for(int i=1;i<=n;i++) { mx[i][0]=A[i]; mi[i][0]=A[i]; } for(int j=1;j<=20;j++)//由长度短的递推处长度长的 for(int i=1;i<=n;i++) if(i+(1<<j)-1<=n) { mx[i][j]=max(mx[i][j-1],mx[i+(1<<(j-1))][j-1]); mi[i][j]=min(mi[i][j-1],mi[i+(1<<(j-1))][j-1]); } int l=0,r=n; int mid; int c; int f; while(l<r) { f=0; mid=(l+r)/2+1; for(int i=1;i<=n;i++) { if(i+mid-1>n) break; c=query(i,i+mid-1); if(c<=k) { go[f][0]=i; go[f][1]=i+mid-1; f++; } } if(f==0) r=mid-1; else { l=mid; cnt=f; } } printf("%d %d\n",l,cnt); for(int i=0;i<cnt;i++) { printf("%d %d\n",go[i][0],go[i][1]); } return 0; }
相关文章推荐
- HDU 5726 GCD [RMQ+二分]
- hdu5726 多校1 GCD【rmq+二分】
- hdu 5289(二分+RMQ) Assignment
- POJ 2452 Sticks Problem(二分+RMQ)
- hdoj5875【二分+RMQ】
- BZOJ 3277: 串/ BZOJ 3473: 字符串 ( 后缀数组 + RMQ + 二分 )
- CF 6E Exposition(RMQ | 线段树,二分)
- Codeforces 387E George and Cards【思维+RMQ+二分+树状数组】被卡常= =
- HDU 5726 GCD(RMQ+二分)
- Codeforces Round #361 (Div. 2) D RMQ+二分
- ZOJ 3726 Alice's Print Service 二分+rmq
- 2016 Multi-University Training Contest 1 1004 hdu 5726 二分+RMQ
- HDU 5289 Assignment [RMQ区间查询+二分搜索]
- “玲珑杯”ACM比赛 Round #19 B.Buildings【二分+RMQ】
- 玲珑学院OJ 1149-Buildings-(RMQ+二分)
- hdu3486 RMQ+二分
- hdu4601 Letter Tree,trie,bfs,dfs,二分,rmq
- (HDU 5726)GCD <RMQ + map + 二分> 多校训练1
- HDU 5875 Function (RMQ+二分)
- Codeforces 652C Foe Pairs【二分+RMQ】好像这题Dp做法很多啊