HDU 5289 Assignment [优先队列 贪心]

HDU 5289 - Assignment

http://acm.hdu.edu.cn/showproblem.php?pid=5289
Tom owns a company and he is the boss. There are n staffs which are numbered from 1 to n in this company, and every staff has a ability. Now, Tom is going to assign a special task to some staffs who were in the same group. In a group, the difference of the ability of any two staff is less than k, and their numbers are continuous. Tom want to know the number of groups like this.
Input
In the first line a number T indicates the number of test cases. Then for each case the first line contain 2 numbers n, k (1 <= n <= 100000, 0 < k <= 10^9), indicate the company has n persons, k means the maximum difference between abilities of staff in a group is less than k. The second line contains n integers:a1,a2,…,an(0 <= ai <= 10^9), indicate the i-th staff’s ability.
Output
For each test,output the number of groups.
Sample Input
2
4 2
3 1 2 4
10 5
0 3 4 5 2 1 6 7 8 9
Sample Output
5
28

这题就是给定一个序列,求出满足区间内最大值最小值之差小于k的子序列的数量。

我是用优先队列每次更新区间左端点,一遍for循环写的。队里的dalao是用RMQ先预处理完然后二分做的。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#define INF 0x3f3f3f3f
#define lowbit(x) (x&(-x))
#define eps 1e-8
using namespace std;
typedef long long ll;

const int maxn = 1e5+7;
int arr[maxn],n,k;

struct node1{
    int pos,val;
    node1(int _pos,int _val):pos(_pos),val(_val){}
    bool operator < (const node1 &c) const{
        return (val < c.val);
    }
};
struct node2{
    int pos,val;
    node2(int _pos,int _val):pos(_pos),val(_val){}
    bool operator < (const node2 &c) const{
        return (val > c.val);
    }
};
priority_queue <node1> high;
priority_queue <node2> low;

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        while(!high.empty()) high.pop();
        while(!low.empty()) low.pop();
        scanf("%d%d",&n,&k);
        for(int i=0;i<n;i++)
            scanf("%d",&arr[i]);
        ll ans = 1;
        int l = 0, MIN = INF, MAX = -INF;//, pmi = 0, pma = 0;
        for(int i=0;i<n;i++)
        {
            MIN = min(MIN,arr[i]);
            MAX = max(MAX,arr[i]);
            high.push(node1(i,arr[i]));
            low.push(node2(i,arr[i]));
            if(MAX - MIN >= k)
            {
                if(arr[i] == MAX)
                {
                    while(!low.empty() && arr[i] - MIN >= k)
                    {
                        l = max(l,low.top().pos + 1);
                        low.pop();
                        MIN = low.top().val;
                    }
                }
                else
                {
                    while(!high.empty() && MAX - arr[i] >= k)
                    {
                        l = max(high.top().pos + 1,l);
                        high.pop();
                        MAX = high.top().val;
                    }
                }
            }
            ans += i-l+1;
        }
        printf("%lld\n",ans-1);
    }
}
内容概要:FS70系列显微镜是一款高功率、符合人体工程学设计的半导体检测显微镜。该系列显微镜采用Mitutoyo无限远校正光学系统和Siedentopf设计的三目镜筒,配备10倍广角目镜(视场数为24),提供四种主要机型:标准型、带变焦功能的非激光型、适用于三种YAG激光波长的型号以及适用于两种波长范围的型号。其物镜放大倍率从1倍到200倍不等,支持长工作距离平场消色差物镜、激光切割物镜以及红外、近红外、紫外和近紫外应用的长工作距离物镜。此外,还提供了微分干涉对比选项(仅限非激光配置)、可选的电动四孔中心调节目镜以及六英尺遥控光强控制。所有型号均具有同心粗调和微调聚焦轮,提供50毫米行程范围,微调精度达0.1毫米/转。 适合人群:从事半导体行业及相关领域的技术人员、研究人员和质量控制人员。 使用场景及目标:①用于半导体晶圆、芯片和其他微小元件的高精度检测;②适用于科研实验室进行材料微观结构分析;③支持工业生产中的产品质量检验与故障排查。 阅读建议:本资料详细介绍了FS70系列显微镜的技术参数和特点,建议使用者根据具体应用场景选择合适的配置,并参考提供的配件选项来优化观测效果。同时,在操作过程中应注意安全事项,特别是涉及激光应用时需遵循相关法规要求。
【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍,个人大四的毕业设计、经导师指导并认可通过的高分设计项目,评审分99分,代码完整确保可以运行,小白也可以亲自搞定,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+数据集+项目介绍【Python毕业设计】-基于卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计源码+
内容概要:本文档详细介绍了使用STM32CubeIDE开发环境,在洋桃2号开发板上实现基于STM32F407ZGT芯片的串口1通过DMA进行不定长数据接收的过程。首先,文档指导用户解压并打开已有工程,配置串口1的相关参数,包括波特率、数据位、校验位、停止位等,并启用了IDLE中断用于处理不定长数据的接收。其次,创建了`usart1.c`和`usart1.h`两个文件来定义串口初始化、数据传输及IDLE中断处理函数。最后,通过修改`main.c`和`stm32f4xx_it.c`文件,实现了串口的初始化与中断响应逻辑。文档还提供了详细的代码片段及注释,帮助开发者理解每个步骤的具体实现。 适合人群:具备一定嵌入式系统开发经验,熟悉STM32系列单片机及其开发环境的研发人员,尤其是从事物联网、智能硬件等领域的工程师。 使用场景及目标:①掌握STM32CubeIDE的项目创建与配置流程;②理解并实现串口通信中DMA传输机制;③学会利用IDLE中断处理不定长数据的接收;④熟悉STM32F4系列单片机的串口配置及中断处理方法。 阅读建议:由于涉及较多底层硬件配置和编程细节,建议读者在阅读过程中结合STM32官方文档及相关技术资料,逐步实践文档中的每一个操作步骤,确保对整个开发流程有深入的理解。同时,可以通过调试工具查看和分析生成的代码,加深对DMA传输和中断处理机制的认识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值