51nod 1272【二分+RMQ】
思路:
这题不能说是长见识,倒是第一次写这么富有套路的题,倒着来,二分区间嘛,这个很简单啊,二分的条件查询一个当前区间的最小值是不是比那个特定的值小,一步步缩小,这就是二分嘛,然后查询用线段树的RMQ写法搞,logn。
二分的模型是0000000111111111这个,窝还是照着自己的两篇小博客写的,一个是线段树,一个是二分。。。然后过的///希望熟能生巧吧
#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;
typedef long long LL;
const int N=5e4+10;
struct asd{
int left;
int right;
int w;
};
asd q[N*4];
int a[N];
void Build(int num,int L,int R)
{
q[num].left=L;
q[num].right=R;
if(L==R)
{
q[num].w=a[L];
return;
}
Build(2*num,L,(L+R)/2);
Build(2*num+1,(L+R)/2+1,R);
q[num].w=min(q[2*num].w,q[2*num+1].w);
}
int Query(int num,int s,int t)
{
if(q[num].left>=s&&q[num].right<=t)
return q[num].w;
if(q[num].left==q[num].right)
return q[num].w;
int mid=(q[num].left+q[num].right)/2;
int ans=1e9;
if(mid>=t)
ans=min(ans,Query(2*num,s,t));
else if(mid<s)
ans=min(ans,Query(2*num+1,s,t));
else
{
ans=min(ans,Query(2*num,s,(s+t)/2));
ans=min(ans,Query(2*num+1,(s+t)/2+1,t));
}
return ans;
}
int get_mina(int s,int t,int num)
{
if(s<=q[num].left&&t>=q[num].right)
return q[num].w;
if(s>q[num].right||t<q[num].left)
return 1000000000;
int a,b;
a=get_mina(s,t,2*num);
b=get_mina(s,t,2*num+1);
return min(a,b);
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
Build(1,1,n);
//二分 0000001111111111
int ans=0;
for(int i=1;i<=n;i++)
{
int left=1,right=i;
while(left<right)
{
int mid=left+(right-left)/2;
if(get_mina(left,mid,1)<=a[i])
right=mid;
else
left=mid+1;
}
ans=max(ans,i-left);
}
printf("%d\n",ans);
return 0;
}
51nod 1272【二分+RMQ】的更多相关文章
- BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
全部串起来做SA, 在按字典序排序的后缀中, 包含每个询问串必定是1段连续的区间, 对每个询问串s二分+RMQ求出包含s的区间. 然后就是求区间的不同的数的个数(经典问题), sort queries ...
- 51nod 1272 思维/线段树
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1272 1272 最大距离 题目来源: Codility 基准时间限制:1 ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1008 Function 二分+RMQ
Time Limit: 7000/3500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- HDU 5289 Assignment(2015 多校第一场二分 + RMQ)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- Bad Hair Day [POJ3250] [单调栈 或 二分+RMQ]
题意Farmer John的奶牛在风中凌乱了它们的发型……每只奶牛都有一个身高hi(1 ≤ hi ≤ 1,000,000,000),现在在这里有一排全部面向右方的奶牛,一共有N只(1 ≤ N ≤ 80 ...
- 【BZOJ5083】普及 单调栈+二分+RMQ
[BZOJ5083]普及 Description 有一个长度为n的字符串,每一位只会是p或j.你需要取出一个子串S(从左到右或从右到左一个一个取出),使得 不管是从左往右还是从右往左取,都保证每时每刻 ...
- Codeforces Round #278 (Div. 1) Strip (线段树 二分 RMQ DP)
Strip time limit per test 1 second memory limit per test 256 megabytes input standard input output s ...
- HDU - 5289:Assignment(单调队列||二分+RMQ||二分+线段树)
Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this com ...
- gym101201J Shopping 二分+RMQ+数学性质
题目传送门 题目大意: 给出n个商品的价格,排成一列,q次查询,每次查询如果你有x的钱,从l格子走到r格子,每种商品有无数个,能买就买,最后还会剩多少钱. 思路: 每一次买都要找离自己最近的且买的起的 ...
随机推荐
- Ubuntu搭建Android开发环境
前言 由于迁移到新的笔记本,所以Android开发环境须要又一次配置了.android官网有配置教程,我正好回想一遍 配置Java环境 下载jdk.官网地址:http://www.oracle.com ...
- 实现多线程的方式Runnable
package com.thread.runnable; /** * 实现多线程的方式有继承Thread类和实现Runnable接口两种方式 * 哪种方式更好呢?实现的方式由于继承的方式. * 原因: ...
- Android studio 百度地图开发(2)地图定位
Android studio 百度地图开发(2)地图定位 email:chentravelling@163.com 开发环境:win7 64位,Android Studio,请注意是Android S ...
- redis中关于过期键的删除策略
我们已经了解到了Redis是一种内存数据库,Redis中数据都是以key-value的形式存储在内存中.由Redisserver来维护和管理这部分内存,内存是何足珍贵,不须要的数据或者是已经使用过的无 ...
- 简明扼要谈Spring IOC的好处
http://a-kuei.iteye.com/blog/676524 iOC:控制反转,它是不是什么技术,它是一种设计模式.所谓控制反转就是由容器控制程序间的关系,而不是传统实现中,由编程代码直接操 ...
- Javascript对象的技巧和陷阱
创建对象的3种方法 方法1 直接创建 var obj = { name: "mike", age: 10 } 方法2 用new创建 var ob = new Date(); 方法3 ...
- quilt
1 什么是quilt quilt是一个patch管理工具,特别适合于对多个patch进行管理. quilt是基于gnu patch和diff的. 2 使用quilt创建一个patch 第一步,quil ...
- js中的连等==和全等===
===是没有强制类型转换的,和其他大部分语言的==是一样的.而js中==是有类型转换的. 比如说"true"==true就是错的,Boolean("false" ...
- QT实现FTP服务器(一)
QListenSocket类的实现: #include "QListenSocket.h" #include <QTcpSocket> #include <QDe ...
- mysql优化-------Myisam与innodb引擎,索引文件的区别
Myisam与innodb引擎,索引文件的区别: innodb的次索引指向对主键的引用. myisam的次索引和主索引都指向物理行. myisam一行一行的插入,会产生一行一行的文件,磁盘上有数据文件 ...