题意:有多少个区间,区间内最大的数减去最小的数差小于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. spring MVC项目中,欢迎页首页根路径到底是怎么设置的

    0. 问题: 如何改mvc中项目的欢迎页,或者叫做根路径 一个东西快弄完了,就剩下一个问题,应该是个小问题.就是mvc项目的欢迎页,怎么给改下呢. 这个项目是通过mvn建立的,整个项目的原型就是spr ...

  2. Spring.Net的Ioc功能基本配置

    Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序.它提供了很多方面的功能,比如依赖注入.面向方面编程(AOP).数据访问抽象及ASP.NET扩展等等. Spri ...

  3. Android:通过startActivityForResult方法来得到Activity的回传值

    在一些情况下,我们通过 A activity跳转到 B activity上,这时希望 A activtiy能从 B activity上得到一些返回值,这个时候我们就不能使用startActivity方 ...

  4. ECSHOP订单自动确认

    1.运行sql代码,生成数据库 CREATE TABLE `ecs_order_auto_confirm` ( `id` INT() UNSIGNED NOT NULL AUTO_INCREMENT, ...

  5. Noppoo choc mini 84 @XUbuntu13.10 compatibility setting

    Months ago, I bought the keyboard Noppoo Choc Mini 84keys for using under XUbuntu12.10, and I have f ...

  6. mysql5.7.12安装过程中遇到的一些问题

    在安装mysql-5.7.12-winx64中遇到的问题总结 1.该版本的mysql解压后的文件夹里没有data文件(切记自己添加data,自己添加的文件可能出现的问题是文件里的文件会缺失) 我在使用 ...

  7. oracle作业

    http://blog.csdn.net/hao_ds/article/details/38382931 oracle作业各种参数的详细介绍

  8. [Java][RCP] 引入第三方jar包时出错: XXXcannot be found XXX

    为什么会这样? 下面的博客有介绍,不在累赘 http://dengmin.iteye.com/blog/260585 这些博客貌似忘掉了一点,或者是我本地的Eclipse新建的项目Version不够高 ...

  9. 为什么C/C++语言使用指针

    这是参加面试时,面试官问的一道开放性题目. 问题是:为什么C/C++语言使用指针? 这个问题一问出来,直接被面试官秒杀了,面试官大神,你怎么不按套路出牌啊? 说好的malloc和new的区别呢?说好的 ...

  10. iOS中使用自定义字体

    1.确定你的项目工程的Resources下有你要用的字体文件(.ttf或者.odf). 2.然后在你的工程的Info.plist文件中新建一行,添加key为:UIAppFonts,类型为Array或D ...