题意:给T足数据,然后每组一个n和k,表示n个数,k表示最大同意的能力差,接下来n个数表示n个人的能力,求能力差在k之内的区间有几个


分析:维护一个区间的最大值和最小值,使得他们的差小于k,于是採用单调队列


普通单调队列做法:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 1e6+5;
int a[maxn];
struct node{int index;int v;
}qd[maxn];
node qx[maxn];
int main()
{int t;scanf("%d",&t);while(t--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int st1,st2,ed1,ed2;st1=st2=ed1=ed2=1;long long sum=0;int j=1;for(int i=1;i<=n&&j<=n;i++){        if(i==1){qd[1].index=qx[1].index=1;qd[1].v=qx[1].v=a[1];}else{while(st1<=ed1){                //单调队列维护最大值if(qd[ed1].v<=a[i]) ed1--;  //比a[i]小的并且下标比i小的出队列else break;}qd[++ed1].v=a[i];               //a[i]入队列qd[ed1].index=i;while(st2<=ed2){                //单调队列维护最小值if(qx[ed2].v>=a[i]) ed2--;  //比a[i]大并且下标比i小的出队列else break;}qx[++ed2].v=a[i];               //a[i]入队列qx[ed2].index=i;while(qd[st1].v-qx[st2].v>=k&&st1<=ed1&&st2<=ed2)   //计数{if(qd[st1].index==j) st1++;if(qx[st2].index==j) st2++;sum+=(i-j);j++;}}}while(j<=n) {sum+=(n-j+1);j++;}printf("%I64d\n",sum);}
}

二分单调队列做法:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn = 1e6+5;
int a[maxn];
struct node{int index;int v;
}qd[maxn];
node qx[maxn];
int maxc(int l,int r,int d){        //二分找出d入队列的为止while(l<=r){int mid=(l+r)/2;if(qd[mid].v==d) return mid;else if(qd[mid].v>d) l=mid+1;else r=mid-1;}return l;
}
int minc(int l,int r,int d){        //二分找出d入队列的为止while(l<=r){int mid=(l+r)/2;if(qx[mid].v==d) return mid;else if(qx[mid].v<d) l=mid+1;else r=mid-1;}return l;
}
int main()
{int t;scanf("%d",&t);while(t--){int n,k;scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){scanf("%d",&a[i]);}int st1,st2,ed1,ed2;st1=st2=ed1=ed2=1;long long sum=0;int j=1;for(int i=1;i<=n&&j<=n;i++){if(i==1){qd[1].index=1;qd[1].v=a[1];qx[1].index=1;qx[1].v=a[1];}else{ed1=maxc(st1,ed1,a[i]); //二分找出d入队列的为止,维护最大值qd[ed1].v=a[i];         qd[ed1].index=i;ed2=minc(st2,ed2,a[i]); //二分找出d入队列的为止,维护最小值qx[ed2].v=a[i];qx[ed2].index=i;while(qd[st1].v-qx[st2].v>=k&&st1<=ed1&&st2<=ed2)//计数{if(qd[st1].index==j) st1++;if(qx[st2].index==j) st2++;sum+=(i-j);j++;}}}while(j<=n) {sum+=(n-j+1);j++;}printf("%I64d\n",sum);}
}


HDU 5289 Assignment(单调队列)相关推荐

  1. hdu 3401 Trade(单调队列优化dp)

    hdu 3401 Trade(单调队列优化dp) 题意:lxhgww喜欢炒股票,他可以在第i天买入或者卖出若干张股票(一天只能买或者卖),两个交易日之间至少相隔w天,问他t天后最多能赚多少. 解题思路 ...

  2. HDU - 3530 Subsequence(单调队列+思维)

    题目链接:点击查看 题目大意:给出一段长度为n的序列,现在给出一个m和一个k,必须满足一段连续区间内的最大值与最小值的差值大于等于m并且小于等于k,问满足条件的连续区间的最大长度 题目分析:一开始看到 ...

  3. HDU 6319(单调队列)

    传送门 题面: Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/ ...

  4. hdu 3530 Subsequence 单调队列

    寻找一个区间,满足:其中的最大值减最小值在[m,k]的范围内,输出最大的区间长度. 思路:维护2个单调队列,一个递增,一个递减. 用一个now记录现在的区间的起点,如果大的数-小的数比k还大,则可以丢 ...

  5. Fxx and game HDU - 5945(单调队列优化dp)

    思路:考虑反着dp,从dp[1]倒推dp[x] 因为dp[i]<=dp[j]  j<i  ,所以考虑用单调队列来优化. 除法不用考虑,考虑加法就行. 代码: #include <bi ...

  6. 入门经典_Chap08_题解总结:极角扫描法 滑动窗口 单调队列 单调栈

    总结  本章主要关注一个重要的问题 – 单调队列和单调栈的使用  同时还有一些其他的问题,如扫描法,递归的思想, 构造, 分治, 二分等 知识点 单调队列 和 单调栈 题目 UVA - 1606 Am ...

  7. hdu 3706 Second My Problem First 单调队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...

  8. HDU 6194 string string string :后缀数组+单调队列 | 后缀自动机

    题意:给出一个字符串,求出出现了恰好k次的子串的个数. 题解:恰好k次 = 至少k次 - 至少k+1次.答案转化为求至少出现k次的子串个数统计.构造好后缀数组以及很重要的Height数组之后.用一个k ...

  9. Hdu 2430 Beans (数据结构_单调队列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2430 题目大意:有n坨豌豆,每坨都有w[i]个,现在要从中选择连续的若干坨,然后用一个能装p个豌豆的背 ...

最新文章

  1. getitemdata中参数设置
  2. python打开excel进行编辑_使用Python进行Excel文件处理
  3. Overleaf v2 评测
  4. sv信道模型是什么_Unity Shader|基本光照模型实现中遇到的疑思
  5. 今日恐慌与贪婪指数为54 等级由贪婪转为中立
  6. 时间复杂度(3):排序算法的时间复杂度 空间复杂度 总结
  7. Android 基础控件与线性布局
  8. android输入法横向,Android 手机拼音输入法横向全评
  9. 在开放社区中的六年,我做着喜欢且擅长的事情,利他而自利
  10. 盖茨自说不善招聘、管理:善于“借力”
  11. DijkstraAlgorithm(迪杰斯特拉算法)
  12. 女生做软件测试工作怎么样?
  13. 信号传输速率的快速了解
  14. Revit数据导入SuperMap iDesktop方法详解
  15. 知识图谱初探(二)三体人物关系图谱构建
  16. java中小数的处理:高精度运算用bigDecimal类,精度保留方法,即舍入方式的指定
  17. 防热服的设计数学建模_高温作业专用服装设计各位厂家提供点解题思路 2018年全国大学生数学建模A题...
  18. JavaScJavaScript 函数
  19. 苏州大学计算机课程与资源,苏州大学计算机学院2018-2019学年第一学期研究生课课程表...
  20. 西门子s7-1200PLC控制V90PN伺服电机FB块

热门文章

  1. MediaPlayer开发全解析
  2. .net程序员转战android第三篇---登录模块之静态登录
  3. varchar和nvarchar的区别
  4. 自定义present和dismiss的转场动画
  5. 大数据开发套件—调度运维常见问题
  6. CentOS6.4下安装xampp
  7. 模拟实现常用字符串函数
  8. Android 实用工具Hierarchy Viewer实战
  9. 2013年第10周三低潮
  10. ASP.NET清除页面缓存的方法