Subsequence

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 6141    Accepted Submission(s): 2041

Problem Description
There is a sequence of integers. Your task is to find the longest subsequence that satisfies the following condition: the difference between the maximum element and the minimum element of the subsequence is no smaller than m and no larger than k.
 
Input
There are multiple test cases.
For each test case, the first line has three integers, n, m and k. n is the length of the sequence and is in the range [1, 100000]. m and k are in the range [0, 1000000]. The second line has n integers, which are all in the range [0, 1000000].
Proceed to the end of file.
 
Output
For each test case, print the length of the subsequence on a single line.
 
Sample Input
5 0 0
1 1 1 1 1
5 0 3
1 2 3 4 5
 
Sample Output
5
4
思路:优先队列+尺取;
我们不用去管这个子串中的最大最小的距离是否大于等于m,我们只要保证这个值小于等于k时继续向右端扩展,应为向右端扩展尺取时,当前值是越来越大的。比如当[l,r]满足dis>=m,那么[l,r+s],的dis>=m;所以我们不需要管m。然后就是尺取中,更新最大最小值的问题,这个用优先队列维护下。复杂度N*log(N);
  1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<stdlib.h>
6 #include<queue>
7 #include<stack>
8 using namespace std;
9 typedef long long LL;
10 int ask[100005];
11 int cnt[100005];
12 struct node1
13 {
14 int x;
15 int id;
16 bool operator<(const node1 &cx)const
17 {
18 if(cx.x == x)
19 return cx.id<id;
20 else return cx.x>x;
21 }
22 };
23 struct node2
24 {
25 int x;
26 int id;
27 bool operator<(const node2 &cx)const
28 {
29 if(cx.x == x)
30 return cx.id<id;
31 else return cx.x<x;
32 }
33 };
34 priority_queue<node1>que1;
35 priority_queue<node2>que2;
36 int main(void)
37 {
38 int n,m,k;
39 while(scanf("%d %d %d",&n,&m,&k)!=EOF)
40 {
41 while(!que1.empty())que1.pop();
42 while(!que2.empty())que2.pop();
43 int i,j;
44 for(i = 0; i < n; i++)
45 {
46 scanf("%d",&ask[i]);
47 }
48 int l = 0;
49 int r = 0;
50 int cc = 0;
51 int ma = ask[0];
52 int mi = ask[0];
53 int x = abs(ma-mi);
54 if(x <= k&&x >= m)cc = 1;
55 node1 ak;
56 node2 ap;
57 ak.x =ask[0];
58 ak.id = 0;
59 ap.x = ask[0];
60 ap.id = 0;
61 que1.push(ak);
62 que2.push(ap);
63 while(l<=r&&r<n)
64 {
65 while(x <= k &&r < n-1)
66 {
67 r++;
68 int c = abs(ask[r]-ma);
69 c = max(abs(ask[r]-mi),c);
70 if(c > k)
71 { //printf("%d %d\n",l,r);
72 r--;
73 break;
74 }
75 node1 ac;
76 ac.x = ask[r];
77 ac.id = r;
78 node2 bc;
79 bc.x= ask[r];
80 bc.id = r;
81 que1.push(ac);
82 que2.push(bc);
83 if(ask[r] > ma)
84 {
85 ma = ask[r];
86 }
87 else if(ask[r] < mi)
88 {
89 mi = ask[r];
90 }
91 x = abs(ma-mi);//printf("%d\n",x);
92 }
93 if(x >= m)
94 {
95 cc = max(cc,r-l+1);
96 }
97 if(ask[l] == ma)
98 {
99 while(!que1.empty())
100 {
101 node1 acc = que1.top();
102 if(acc.id <= l)
103 {
104 que1.pop();
105 }
106 else
107 {
108 ma = acc.x;
109 break;
110 }
111 }
112 }
113 if(ask[l]==mi)
114 {
115 while(!que2.empty())
116 {
117 node2 acc = que2.top();
118 if(acc.id <= l)
119 {
120 que2.pop();
121 }
122 else
123 {
124 mi = acc.x;
125 break;
126 }
127 }
128 }
129 l++;
130 if(l == r+1)
131 { //printf("%d\n",r);
132 r++;
133 node1 akk;
134 node2 app;
135 akk.x =ask[r];
136 akk.id = r;
137 app.x = ask[r];
138 app.id = r;
139 que1.push(akk);
140 que2.push(app);
141 mi = ask[r];
142 ma = ask[r];
143 }
144 }
145 printf("%d\n",cc);
146 }
147 return 0;
148 }
 

Subsequence(hdu3530)的更多相关文章

  1. HDUOJ ---1423 Greatest Common Increasing Subsequence(LCS)

    Greatest Common Increasing Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536 ...

  2. Poj 2533 Longest Ordered Subsequence(LIS)

    一.Description A numeric sequence of ai is ordered if a1 < a2 < ... < aN. Let the subsequenc ...

  3. 1423 Greatest Common Increasing Subsequence (LCIS)

    讲解摘自百度; 最长公共上升子序列(LCIS)的O(n^2)算法? 预备知识:动态规划的基本思想,LCS,LIS.? 问题:字符串a,字符串b,求a和b的LCIS(最长公共上升子序列).? 首先我们可 ...

  4. Subsequence(HDU3530+单调队列)

    题目链接 传送门 题面 题意 找到最长的一个区间,使得这个区间内的最大值减最小值在\([m,k]\)中. 思路 我们用两个单调队列分别维护最大值和最小值,我们记作\(q1\)和\(q2\). 如果\( ...

  5. POJ 2533-Longest Ordered Subsequence(DP)

    Longest Ordered Subsequence Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 34454   Acc ...

  6. HPU第三次积分赛-D:Longest Increasing Subsequence(DP)

    Longest Increasing Subsequence 描述 给出一组长度为n的序列,a1​,a2​,a3​,a4​...an​, 求出这个序列长度为k的严格递增子序列的个数 输入 第一行输入T ...

  7. HDU 1423 Greatest Common Increasing Subsequence(LCIS)

    Greatest Common Increasing Subsequenc Problem Description This is a problem from ZOJ 2432.To make it ...

  8. Longest common subsequence(LCS)

    问题 说明该问题在生物学中的实际意义 Biological applications often need to compare the DNA of two (or more) different ...

  9. 第六周 Leetcode 446. Arithmetic Slices II - Subsequence (HARD)

    Leetcode443 题意:给一个长度1000内的整数数列,求有多少个等差的子数列. 如 [2,4,6,8,10]有7个等差子数列. 想了一个O(n^2logn)的DP算法 DP[i][j]为 对于 ...

随机推荐

  1. Jumpserver堡垒机容器化部署

    JumpServer 是符合 4A 的专业运维安全审计系统. 前提条件 已部署docker Jumpserver 对外需要开放 80 443 和 2222 端口 服务器.数据库.redis 等依赖组件 ...

  2. 分布式事务(4)---最终一致性方案之TCC

    分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...

  3. 3 - 简单了解一下springboot中的yml语法 和 使用yml赋值

    1.简单了解yml语法 2.使用yml给实体类赋值 准备工作:导入依赖 <!-- 这个jar包就是为了实体类中使用@ConfigurationProperties(prefix = " ...

  4. 日常Java 2021/9/23

    练习使用Math.random函数,以及JOptionPane.showMessageDialog(null,"字符串","Results",JOptionPa ...

  5. Oracle数据库导入与导出方法简述

    说明: 1.数据库数据导入导出方法有多种,可以通过exp/imp命令导入导出,也可以用第三方工具导出,如:PLSQL 2.如果熟悉命令,建议用exp/imp命令导入导出,避免第三方工具版本差异引起的问 ...

  6. Oracle中如何自定义类型

    一:Oracle中的类型有很多种,主要可以分为以下几类:1.字符串类型.如:char.nchar.varchar2.nvarchar2.2.数值类型.如:int.number(p,s).integer ...

  7. [学习总结]3、Android---Scroller类(左右滑动效果常用的类)

    参考资料:http://blog.csdn.net/vipzjyno1/article/details/24592591 非常感谢这个兄弟! 在android学习中,动作交互是软件中重要的一部分,其中 ...

  8. vue页面常用方法

    输入框事件监听(三):blur与change的差异 iview 验证 trigger: 'blur,change', 同时加两个,省的每次还想input 还是 select 4.加载:Loading ...

  9. Linux系统信息查看命令(ZZ)

    http://hi.baidu.com/thinkdifferent/blog/item/22f4a80161630e011d958384.html转自一个baidu师兄的博客,很好的一个总结,推荐下 ...

  10. 注解开发中的@Results注解使用

    package com.hope.dao;import com.hope.domain.User;import com.sun.xml.internal.bind.v2.model.core.ID;i ...