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);
}
}

最新文章

  1. AngularJS 脏检查深入分析
  2. centos下MYSQL 没有ROOT用户的解决方法。
  3. RMQ训练题 codevs 1291 火车线路 已经搞定
  4. [No000047]好的架构源于不停地衍变,而非设计
  5. [Effective JavaScript 笔记]第42条:避免使用轻率的猴子补丁
  6. wp7 BaseDictionary&lt;TKey, TValue&gt;
  7. python 循环使用 while 或 for 语句实现用户名密码输错三次退出
  8. Docker - 运行 containers 使用在 swarm 模式下创建的 overlay 模式的 network
  9. Maven的Archetype简介
  10. 【Android】你知道还可以通过 View.animate() 来实现动画么
  11. 关于datagrid中数据条件颜色问题
  12. SQL Server 关于 Table 字典数据的查询SQL
  13. django的url反向解析
  14. halcon图像处理的基本思路
  15. SendMessage,BroadcastMessage
  16. AES CBC/CTR 加解密原理
  17. 说说初用 Mock 工具测试碰到的坑
  18. Eclipse远程连接Hadoop
  19. HUE配置文件hue.ini 的hbase模块详解(图文详解)(分HA集群和非HA集群)
  20. spring jpa和mybatis整合

热门文章

  1. Merge array and hash in ruby if key appears in array
  2. 建造者模式(Builder)(生成器模式)(框架化)
  3. webService学习五(插入片,---监控方法)
  4. 跟我一起做一个vue的小项目(六)
  5. Mybatis+Spring实现Mysql读写分离
  6. centos6.5 zabbix2.2 亲测安装
  7. sending data mysql slow Mysql查询非常慢的可能原因
  8. 【笔记】LR配置ODBC连接数据库进行参数化(mysql )未完待续
  9. MS17-010远程溢出漏洞 - 永恒之蓝 [CVE-2017-0143]
  10. Linux C/C++开发