Codeforces 602B Approximating a Constant Range(RMQ)
2015-12-03 21:18
85 查看
题目链接:Codeforces 602B Approximating a Constant Range
代码
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 100005; const int maxm = 20; int N, A[maxn], mx[maxn][maxm+5], mi[maxn][maxm+5]; int query(int l, int r) { int k = 0; while ((1<<(k+1)) <= r - l + 1) k++; return max(mx[l][k], mx[r-(1<<k)+1][k]) - min(mi[l][k], mi[r-(1<<k)+1][k]); } void init () { scanf("%d", &N); for (int i = 1; i <= N; i++) scanf("%d", &A[i]); for (int i = 1; i <= N; i++) mx[i][0] = mi[i][0] = A[i]; for (int j = 1; (1<<j) <= N; j++) { for (int i = 1; i + (1<<j) - 1 <= N; i++) { mi[i][j] = min(mi[i][j-1], mi[i + (1<<(j-1))][j-1]); mx[i][j] = max(mx[i][j-1], mx[i + (1<<(j-1))][j-1]); } } } int main () { init(); int l = 1, r = 1, ans = 1; while (l <= N) { while (r <= N && query(l, r) <= 1) r++; ans = max(r - l, ans); l++; } printf("%d\n", ans); return 0; }
相关文章推荐
- Android作业分组与选题
- 用Intent调用系统中经常被用到的组件
- Android是否联网判断
- 设置ExpandableListView不显示分割线
- float/double数据不显示成科学计数法
- python: error while loading shared libraries: libpython3.4m.so.1.0: cannot open shared object file:
- 【Unity开发】简单的对象池实现
- Android关于ListView的分割线问题
- Android 让EditText输入框失去焦点
- cocos2d 消息映射
- android修改控件外观(使用drawable资源)
- Object-C,对象和方法
- Object-C,对象和方法
- Object-C,对象和方法
- Android之发送短信后按钮(60秒)变灰色每隔一秒递减显示
- objective-c NSMutableAttributedString
- XCode安装插件无效的解决办法
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- android有关图片的操作(一)
- Android 修改当前显示时间