Day6 - I - Sticks Problem POJ - 2452
Now given the length of S1, S2, S3, …Sn, you are required to find the maximum value j - i.
Input
Line 1: a single integer n (n <= 50000), indicating the number of sticks.
Line 2: n different positive integers (not larger than 100000), indicating the length of each stick in order.
Output
Sample Input
- 4
- 5 4 3 6
- 4
- 6 5 4 3
Sample Output
- 1
- -1
- 思路:求每个点往右的最大值且都不小于他,先想到了单调队列,区间最值就用ST表,整了整发现WA了,发现并不需要两端队列,遍历每一个点找右侧就行了,好像叫单调栈,找到比每个点小的第一个点,在这个区间内找最大点,用二分加速寻找就行了
- const int maxm = 5e4+;
- int Max[maxm][], Min[maxm][], a[maxm], N;
- void init() {
- memset(Max, , sizeof(Max)), memset(Min, , sizeof(Min));
- }
- int BisearchMin(int pos) {
- int l = pos+, r = N, mid, ans = N, k, t;
- while(l <= r) {
- mid = (l + r) >> ;
- k = log((double)(mid-pos+)) / log(2.0);
- t = min(Min[pos][k], Min[mid - ( << k) + ][k]);
- if(t < a[pos]) {
- ans = mid;
- r = mid - ;
- } else
- l = mid + ;
- }
- return ans;
- }
- int BisearchMax(int l, int r) {
- int k, ans, mid, t, t2;
- k = log((double)(r - l + )) / log(2.0);
- t = max(Max[l][k], Max[r - (<<k)+][k]);
- while(l <= r) {
- mid = (l + r) >> ;
- k = log((double)(mid - l + )) / log(2.0);
- t2 = max(Max[l][k], Max[mid - (<<k)+][k]);
- if(t2 == t) {
- ans = mid;
- r = mid - ;
- } else
- l = mid + ;
- }
- return ans;
- }
- int main() {
- while(scanf("%d", &N) != EOF) {
- init();
- int ans = -;
- for(int i = ; i <= N; ++i) {
- scanf("%d", &a[i]);
- Max[i][] = Min[i][] = a[i];
- }
- for(int k = ; (<<k) <= N; ++k) {
- for(int i = ; i+(<<k)- <= N; ++i) {
- Max[i][k] = max(Max[i][k-], Max[i+(<<(k-))][k-]);
- Min[i][k] = min(Min[i][k-], Min[i+(<<(k-))][k-]);
- }
- }
- for(int i = ; i <= N; ++i) {
- int r = BisearchMin(i);
- r = BisearchMax(i, r);
- if(i != r)
- ans = max(ans, r - i);
- }
- printf("%d\n", ans);
- }
- return ;
- }
Day6 - I - Sticks Problem POJ - 2452的更多相关文章
- POJ 2452 Sticks Problem
RMQ+二分....枚举 i ,找比 i 小的第一个元素,再找之间的第一个最大元素..... Sticks Problem Time Limit: 6000MS ...
- poj 2452(RMQ+二分查找)
题目链接: http://poj.org/problem?id=2452 题意:在区间[1,n]上找到满足 a[i]<a[k]<a[j] (i<=k<=j) 的最大子区间 (j ...
- Sticks Problem
Sticks Problem poj-2452 题目大意:给你一串n个数的数列a,上面的数为a1到an.我们求最大的y-x,其中,y和x满足1.x<y 2.任意的x<i<y,都有ai ...
- A - Jessica's Reading Problem POJ - 3320 尺取
A - Jessica's Reading Problem POJ - 3320 Jessica's a very lovely girl wooed by lots of boys. Recentl ...
- POJ_2452 Sticks Problem 【ST表 + 二分】
一.题目 Sticks Problem 二.分析 对于$i$和$j$,并没有很好的方法能同时将他们两找到最优值,所以考虑固定左端点$i$. 固定左端点后,根据题意,$a[i]$是最小值,那么现在的问题 ...
- POJ 2452 Sticks Problem (暴力或者rmq+二分)
题意:给你一组数a[n],求满足a[i] < a[k] < a[j] (i <= k <= j)的最大的 j - i . 析:在比赛时,我是暴力做的,虽然错了好多次,后来说理解 ...
- Jessica's Reading Problem POJ - 3320
Jessica's Reading Problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 17562 Accep ...
- Greedy:Jessica's Reading Problem(POJ 3320)
Jessica's Reading Problem 题目大意:Jessica期末考试临时抱佛脚想读一本书把知识点掌握,但是知识点很多,而且很多都是重复的,她想读最少的连续的页数把知识点全部掌握(知识点 ...
- POJ-2452 Sticks Problem 二分+RMQ
题目链接: https://cn.vjudge.net/problem/POJ-2452 题目大意: 给出一个数组a,求最大的j-i满足 i<j && a[i] ... a[j] ...
随机推荐
- 标签UILabel的讲解
首先,我先自定义几个名词,方便接下来的讲解工作.如下图所示: 接下来,通过五个方面来讲解我们能对UILabel做出哪些改变或者称之为设置: 1.文字 1.1普通文字:内容text.字体大小font.字 ...
- Django--redis 保存session
pipenv install django-redis settings.py: # 作为 cache backend 使用配置 使用redis保存session CACHES = { "d ...
- StringBuffer调整空间
在无法估算字符串大小情况下,可以使用StringBuffer的trimToSize()方法调整到合适大小.
- kafka 副本同步细节
图片来源:咕泡学院
- Codeforces Round #551 (Div. 2)D(树形DP)
#define HAVE_STRUCT_TIMESPEC#include <bits/stdc++.h>using namespace std;int val[300007],num[30 ...
- free to monitor your sqlserver easy and safe and ...
Unlike AWR in Oracle, Sqlserver does not have offical way to make history performance information fo ...
- js加密(十)csti.cn md5
1. http://www.csti.cn/index.htm 2. 登录密码加密 3. 加密js: var hexcase = 0; var b64pad = ""; var c ...
- 如何使用gcc_clang进行C语言的编译_编译的流程是什么?
编译命令 gcc/clang -g -O2 -o -c test test.c -I... -L... -l -g : 输出文件中的调试信息 -O : 对输出文件做出指令优化,默认是O1, O2优化更 ...
- 学习Javascript的8张思维导图
分别归类为: javascript变量 javascript运算符 javascript数组 javascript流程语句 javascript字符串函数 javascript函数基础 javascr ...
- C#往TextBox的方法AppendText加入的内容里插入换行符----转载
C# TextBox换行[huan hang]时你往往会想到直接付给一个含有换行[huan hang]符"\n"的字符[zi fu]串[zi fu chuan]给Text属性[sh ...