题意:有多少个区间,区间内最大的数减去最小的数差小于k

对每个数它所在的区间,可以只往前找(类似dp的无后效性) 比如对位置3的数,可以往前找的区间是[3, 3], [2, 3], [1, 3], [0, 3]这样

这样 遍历a[i] 对每个a[i]往前 就可以得到所有的区间

比如案例

10 5

0 3 4 5 2 1 6 7 8 9

(最小值,最大值)的形式

每个数增加一个(自己,自己)

一旦不满足条件了就不必再进行下去

那么很容易想到这是一个类似队列的情况

对于这个案例 跑一下队列就是

(把队中元素的个数加起来就是结果)

那么问题就转化成了怎么知道队列中存在一个数是要弹出的(也就是上述案例6的时候,怎么知道1在队列中)

我先用优先队列处理了一下每个数前面需要弹出的数的位置的最大值

再用队列模拟上述过程即可

 #include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define lson l, m
#define rson m+1, r
const int N=1e5+;
const LL mod=1e9+;
typedef pair<int, int> PI;
PI a[N];
int minn[N], maxn[N];
void out(priority_queue<PI, vector<PI>, greater<PI> > q)
{
while(!q.empty())
{
printf("(%d %d) ", q.top().first, q.top().second);
q.pop();
}
puts("");
} int main()
{
// freopen("1002.in", "r", stdin);
// freopen("out.txt", "w", stdout);
int t;
scanf("%d", &t);
while(t--)
{
int n, k;
scanf("%d%d", &n, &k);
for(int i=;i<n;i++)
{
int x;
scanf("%d", &x);
a[i]=make_pair(x, i);
}
memset(minn, -, sizeof(minn));
memset(maxn, -, sizeof(maxn));
priority_queue<PI, vector<PI>, greater<PI> > q1;
while(!q1.empty())
q1.pop();
q1.push(a[]);
for(int i=;i<n;i++)
{
while(q1.size()> && a[i].first-q1.top().first>=k)
{
minn[i]=max(q1.top().second, minn[i]);
q1.pop();
}
q1.push(a[i]);
// out(q1);
}
priority_queue<PI, vector<PI>, less<PI> > q2;
while(!q2.empty())
q2.pop();
q2.push(a[]);
for(int i=;i<n;i++)
{
while(q2.size()> && q2.top().first-a[i].first>=k)
{
maxn[i]=max(q2.top().second, maxn[i]);
q2.pop();
}
q2.push(a[i]);
}
// for(int i=0;i<n;i++)
// printf("%d %d\n", minn[i], maxn[i]); LL ans=;
queue<int> Q;
while(!Q.empty())
Q.pop();
int cur=;
for(int i=;i<n;i++)
{
if(minn[i]<cur)
minn[i]=-;
if(maxn[i]<cur)
maxn[i]=-;
while(!Q.empty() && (maxn[i]!=- || minn[i]!=-))
{
if(Q.front()==maxn[i])
maxn[i]=-;
if(Q.front()==minn[i])
minn[i]=-;
cur=Q.front();
Q.pop();
}
Q.push(a[i].second);
ans+=Q.size();
}
printf("%I64d\n", ans);
}
return ;
}

HDOJ 5289

[优先队列]HDOJ5289 Assignment的更多相关文章

  1. [HDOJ5289]Assignment(RMQ,二分)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5289 题意:求满足区间内最大值和最小值差为k的区间个数. 预处理出区间的最值,枚举左端点,根据最值的单 ...

  2. HDU 5289 Assignment [优先队列 贪心]

    HDU 5289 - Assignment http://acm.hdu.edu.cn/showproblem.php?pid=5289 Tom owns a company and he is th ...

  3. 2015暑假多校联合---Assignment(优先队列)

    原题链接 Problem Description Tom owns a company and he is the boss. There are n staffs which are numbere ...

  4. 2015 Multi-University Training Contest 1 - 1002 Assignment

    Assignment Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5289 Mean: 给你一个数列和一个k,求连续区间的极值之 ...

  5. Stall Reservations(POJ 3190 贪心+优先队列)

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4434   Accepted: 158 ...

  6. POJ 3190 Stall Reservations (优先队列)C++

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7646   Accepted: 271 ...

  7. Stall Reservations(贪心+优先队列)

    Description Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will onl ...

  8. Stall Reservations POJ - 3190 (贪心+优先队列)

    Stall Reservations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11002   Accepted: 38 ...

  9. POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)

    Stall Reservations Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one w ...

随机推荐

  1. 《CDN web加速代理》RHEL6

    CDN加速代理环境的测试:192.168.1.这个网段是可以上网的,2网段不可以上网 一台apache服务器 :配置 只安装apche服务 IP 192.168.1.59 一台双网卡的服务器 :只安装 ...

  2. Android app version code and name

    android:versionCode和android:versionName 区别   Android的版本可以在androidmainfest.xml中定义, 主要有android:version ...

  3. IP进制站群原理

    百度搜索:“inurl:0×00”,会发现全是以八进制.十六进制形式显示的域名(如下图),当点击后,浏览器会自动将这些域名转换为十进制的ip.这种方式在黑帽圈目前挺火爆的,用于做长尾词排名,可以带来可 ...

  4. 12个git实战建议和技巧

    摘要:git无疑是现在最热门的版本控制工具,而且正在进一步侵占SVN以及CVS的市场.本文作者从国外技术问答社区Stack Overflow整理的12个很实用的git使用技巧和建议,希望对你有帮助. ...

  5. 两个Activity之间的交互startActivityForResult的使用

    代码如下: package com.zzw.teststartintentforrequest; import android.app.Activity; import android.content ...

  6. JS面向对象编程创建类的方式

    js创建类的方式有几种,大致如下: 1,构造函数方式: function Car(parameters) { this.name = "objectboy"; } var cat1 ...

  7. windows7 64bit下安装Oracle 11g R2

    Win7 bit64,安装的是64位的客户端.   1.PLSql连接数据库   (1)下载 instantclient-basic-win32-11.2.0.1.0.zip解压到Oracle要目当下 ...

  8. ActiveMQ之MessageListener

    消息的消费者接收消息可以采用两种方式: 1.consumer.receive()或 consumer.receive(int timeout); 2.注册一个MessageListener. 采用第一 ...

  9. yabeblog.me 关于Tomcat7部署 一台机器部署两个项目,一个用域名访问,一个用IP访问

    该内容来自 http://www.yabeBlog.me,转载请说明出处. 1.使用IP访问的项目放在Tomcat7 的webapps目录下面:比如:AAA 2.使用域名访问的项目放在Tomcat7的 ...

  10. Java读取本地文件进行unicode解码

    工具使用: package test.opservice; import eh.util.MapValueUtil; import java.io.BufferedReader; import jav ...