hdu5289 RMQ+二分
2024-10-08 03:10:20
RMQ预处理最大值,最小值,然后对于每一点,二分可能满足的区间长度,长度-1就是该店开始的区间满足的个数。
#include<stdio.h>
#include<string.h>
#include<math.h>
#define maxn 100010
#define LL __int64
int dp1[maxn][],n,a[maxn],dp2[maxn][];
int min(int x,int y)
{return x<y?x:y;}
int max(int x,int y)
{return x>y?x:y;}
void rmq()
{
int i,j;
for(i=;i<=n;i++)
{
dp1[i][]=a[i];
dp2[i][]=a[i];
}
for(j=;j<=;j++)
{
for(i=;i+(<<j)-<=n;i++)
{
dp1[i][j]=min(dp1[i][j-],dp1[i+(<<(j-))][j-]);
dp2[i][j]=max(dp2[i][j-],dp2[i+(<<(j-))][j-]);
}
}
}
int ok(int m,int l,int k)
{
int r=l+m-;
int t=(int)(log(m*1.0)/log(2.0));
int minnum=min(dp1[l][t],dp1[r-(<<t)+][t]);
int maxnum=max(dp2[l][t],dp2[r-(<<t)+][t]);
if(maxnum-minnum<k)
return ;
return ;
}
int main()
{
int t,i,j,k;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
for(i=;i<=n;i++)
scanf("%d",&a[i]);
rmq();
LL ans=;
for(i=;i<=n;i++)
{
int l=,r=n-i+,m;//枚举长度
while(l<=r){
m=(l+r)>>;
if(ok(m,i,k))
{
l=m+;
}
else r=m-;
}
ans+=l-;
}
printf("%I64d\n",ans);
}
}
最新文章
- AngularJS 脏检查深入分析
- centos下MYSQL 没有ROOT用户的解决方法。
- RMQ训练题 codevs 1291 火车线路 已经搞定
- [No000047]好的架构源于不停地衍变,而非设计
- [Effective JavaScript 笔记]第42条:避免使用轻率的猴子补丁
- wp7 BaseDictionary<;TKey, TValue>;
- python 循环使用 while 或 for 语句实现用户名密码输错三次退出
- Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network
- Maven的Archetype简介
- 【Android】你知道还可以通过 View.animate() 来实现动画么
- 关于datagrid中数据条件颜色问题
- SQL Server 关于 Table 字典数据的查询SQL
- django的url反向解析
- halcon图像处理的基本思路
- SendMessage,BroadcastMessage
- AES CBC/CTR 加解密原理
- 说说初用 Mock 工具测试碰到的坑
- Eclipse远程连接Hadoop
- HUE配置文件hue.ini 的hbase模块详解(图文详解)(分HA集群和非HA集群)
- spring jpa和mybatis整合
热门文章
- Merge array and hash in ruby if key appears in array
- 建造者模式(Builder)(生成器模式)(框架化)
- webService学习五(插入片,---监控方法)
- 跟我一起做一个vue的小项目(六)
- Mybatis+Spring实现Mysql读写分离
- centos6.5 zabbix2.2 亲测安装
- sending data mysql slow Mysql查询非常慢的可能原因
- 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
- MS17-010远程溢出漏洞 - 永恒之蓝 [CVE-2017-0143]
- Linux C/C++开发