HDOJ 5289 Assignment 单调队列
维护一个递增的和递减的单调队列
Assignment
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 78 Accepted Submission(s): 40
ability of any two staff is less than k, and their numbers are continuous. Tom want to know the number of groups like this.
than k. The second line contains n integers:a[1],a[2],…,a[n](0<=a[i]<=10^9),indicate the i-th staff’s ability.
2
4 2
3 1 2 4
10 5
0 3 4 5 2 1 6 7 8 9
5
28HintFirst Sample, the satisfied groups include:[1,1]、[2,2]、[3,3]、[4,4] 、[2,3]
pid=5297" style="color:rgb(26,92,200); text-decoration:none">5297
5296 5295/* ***********************************************
Author :CKboss
Created Time :2015年07月21日 星期二 12时36分35秒
File Name :1002.cpp
************************************************ */ #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map> using namespace std; typedef long long int LL;
const int maxn=100100; struct Node
{
int val,pos;
}; int n,K;
int a[maxn];
// q1 dizheng q2 dijian
deque<Node> q1,q2; LL ans; int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout); int T_T;
scanf("%d",&T_T);
while(T_T--)
{
ans=0;
while(!q1.empty()) q1.pop_back();
while(!q2.empty()) q2.pop_back(); scanf("%d%d",&n,&K);
for(int i=0;i<n;i++) scanf("%d",a+i); int head=0;
for(int i=0;i<n;i++)
{
Node node = (Node){a[i],i}; /// push q1 tail dizheng
while(!q1.empty())
{
Node b = q1.back();
if(b.val<node.val) q1.pop_back();
else break;
}
q1.push_back(node); /// push q2 tail dijian
while(!q2.empty())
{
Node b = q2.back();
if(b.val>node.val) q2.pop_back();
else break;
}
q2.push_back(node); if(i==0) ans++;
else
{
/// bijiao head
while(true)
{
Node big = q1.front();
Node small = q2.front(); if(big.val-small.val<K) break;
else
{
if(small.pos<big.pos)
{
head=small.pos+1; q2.pop_front();
}
else
{
head=big.pos+1; q1.pop_front();
}
}
}
ans+=i-head+1;
}
} cout<<ans<<endl;
} return 0;
}
HDOJ 5289 Assignment 单调队列的更多相关文章
- HDU 5289 Assignment(单调队列)
题意:给T足数据,然后每组一个n和k,表示n个数,k表示最大同意的能力差,接下来n个数表示n个人的能力,求能力差在k之内的区间有几个 分析:维护一个区间的最大值和最小值,使得他们的差小于k,于是採用单 ...
- 二分+RMQ/双端队列/尺取法 HDOJ 5289 Assignment
题目传送门 /* 题意:问有几个区间最大值-最小值 < k 解法1:枚举左端点,二分右端点,用RMQ(或树状数组)求区间最值,O(nlog(n))复杂度 解法2:用单调队列维护最值,O(n)复杂 ...
- HDU - 5289 Assignment (RMQ+二分)(单调队列)
题目链接: Assignment 题意: 给出一个数列,问其中存在多少连续子序列,使得子序列的最大值-最小值<k. 题解: RMQ先处理出每个区间的最大值和最小值(复杂度为:n×logn),相 ...
- HDU 5289 Assignment(多校2015 RMQ 单调(双端)队列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 Problem Description Tom owns a company and he is ...
- 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 ...
- ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)
Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...
- HDOJ 3415 Max Sum of Max-K-sub-sequence(单调队列)
因为是circle sequence,可以在序列最后+序列前n项(或前k项);利用前缀和思想,预处理出前i个数的和为sum[i],则i~j的和就为sum[j]-sum[i-1],对于每个j,取最小的s ...
- hdu5289(2015多校1)--Assignment(单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- HDU 5089 Assignment(rmq+二分 或 单调队列)
Assignment Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
随机推荐
- List of Chromium Command Line Switches(命令行开关集)——官方指定命令行更新网址
转自:http://peter.sh/experiments/chromium-command-line-switches/ There are lots of command lines which ...
- chromium的安装程序
转自:http://www.xue163.com/182/6/1822338.html#pinglun 这篇文章主要简单讲解chromium的安装程序mini_installer 在编译mini_in ...
- [翻译] POP Facebook的动画开源库
Pop is an extensible animation engine for iOS and OS X. In addition to basic static animations, it s ...
- linux 程序移植到Android
用动态链接的方法: arm-linux-gcc hello.c -o hello.out -Wl,-dynamic-linker=/system/lib/ld-linux.so.3 并且拷贝文件到安卓 ...
- HBase系统架构及数据结构(转)
原文链接:Hbase系统架构及数据结构 HBase中的表一般有这样的特点: 1 大:一个表可以有上亿行,上百万列 2 面向列:面向列(族)的存储和权限控制,列(族)独立检索. 3 稀疏:对于为空(nu ...
- ASP.NET中使用TreeView显示文件
在ASP.NET中,TreeView的使用很普遍,把它利用上来 首先加入TreeView控件 <asp:TreeView ID="driverInfoView" runat= ...
- javascript常用技巧归纳
最近归纳了下,发现还很多的哦1 javascript捕捉方向键 <HTML><HEAD><title>反选</title><script lan ...
- CentOS7 常用命令集合
CentOS7 常用命令集合 文件与目录操作 touch test.txt: 创建一个文本文件 文本内容处理 查询操作 压缩.解压 yum安装器 网络相关 系统相关 XSheel 5相关操作 窗体快捷 ...
- 转:如何转换Android打包用jks格式keystore证书为Air用pkcs12格式p12证书
转自:http://blog.k-res.net/archives/1539.html 如何转换Android打包用jks格式keystore证书为Air用pkcs12格式p12证书 六月 11, 2 ...
- 委托批量处理Excel
在以前的博文中--CAD批量处理工具--BatchProc,即只要用户输入处理单个文件的代码,即可批量处理多个文件.使用起来特别方便. 在现在的地籍处理中,处理Excel的情况比较多,尤其需要反反复复 ...