【HDU3530】【單調佇列(雙)】Subsequence 【長度為n的數列,求最長子區間的長度,使得區間的最大值與最小值的差滿足一個範圍】
描述:
Subsequence
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 6143 Accepted Submission(s): 2042
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
Source
Recommend zhengfeng | We have carefully selected several similar problems for you:
題意:
給你一個長度為n的數列,求最長子區間的長度,使得區間的最大值與最小值的差s滿足,
m<=s<=k
思路:
這題很容易想到用兩個單調佇列維護當前最值,
作為判斷條件,如果差值大於k了,就去掉較前面的那個佇列元素,並把區間頭更新為它的標號+1,
這裡注意差值小於m並不需要去掉元素,還有更新答案時要先判斷是否滿足條件才能更新。
程式碼:
#include <bits/stdc++.h> #define pr(x) cout << #x << "= " << x << " " ; #define pl(x) cout << #x << "= " << x << endl; #define ll __int64 using namespace std; template<class T> void read(T&num) { char CH; bool F=false; for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar()); for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar()); F && (num=-num); } int stk[70], tp; template<class T> inline void print(T p) { if(!p) { puts("0"); return; } while(p) stk[++ tp] = p%10, p/=10; while(tp) putchar(stk[tp--] + '0'); putchar('\n'); } const int N=1e5+10; int n,m,k,a[N]; int qmin[N],qmax[N]; int main(){ #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif while(~scanf("%d%d%d",&n,&m,&k)){ int lm=0,rm=0,lx=0,rx=0,ans=0,l=0; for(int i=1; i<=n; i++){ read(a[i]); while(lm<rm && a[qmin[rm-1]]>a[i])rm--;//遞增 while(lx<rx && a[qmax[rx-1]]<a[i])rx--;//遞減 qmin[rm++]=i; qmax[rx++]=i; while(a[qmax[lx]]-a[qmin[lm]]>k){ l=(qmin[lm]<qmax[lx])?qmin[lm++]:qmax[lx++]; } if(a[qmax[lx]]-a[qmin[lm]]>=m){ ans=max(ans, i-l);//因為l從0開始所以i-l不需要+1 } } print(ans); } return 0; }
相關推薦
【HDU3530】【單調佇列(雙)】Subsequence 【長度為n的數列,求最長子區間的長度,使得區間的最大值與最小值的差滿足一個範圍】
描述: Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 6143 Accep
c++中關於直接使用佇列(queue)的學習【標頭檔案#include】
對queue的淺認識 首先我們需要定義一個佇列之前,需要知道定義一個什麼型別的佇列,比如結構體型別的; queue<(結構體的名字)> (你定義的佇列名字); queue<node> M; queue中有幾個可以呼叫的函式,我們直接可以使用:
【轉】OpenLayers專案分析(五) 資料解析以GML為例
前面也提到過,OpenLayers設計是符合標準的,有良好的框架結構和實現機制,非常值得學習。OpenLayers支援的格式比較多,有XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS等。這回主要以GML為例來看OpenLayers 資料的解析過程。
單調佇列 (POJ2823)
前幾天做過這題...當時使用線段樹做的....要跑9500MS才能過...今天看了下單調佇列...以為很難...但理解一下..發現單調佇列其實很簡單.. 單調佇列是從數列前掃到數列後...維護一個最值或者一個所需的最優解之類的...每次的最優解都是在佇列的頭....所以要一
聯賽模擬測試18 A. 施工 單調佇列(棧)優化DP
## 題目描述 ![](https://img2020.cnblogs.com/blog/1996139/202010/1996139-20201017112702146-883654574.png) ![](https://img2020.cnblogs.com/blog/1996139/202010/19
一個長度為N的陣列中包含正數 負數 0,請實現一個函式找出和為0的最長子數列
<strong><span style="font-size:18px;">// #include<iostream> #include<vector>
【TP5.1】whereOr的用法(雙條件查詢)
author:咔咔 wechat:fangkangfg 在平時的工作中,我們會遇到一些情況,比如; 最近我在寫TP5.1的商城部落格,裡邊就有一個這樣的需求 一個條件是校驗是否在角色許可權裡 一個條件就是需要校驗的許可權 這個時候就不知道sql怎麼
【c#】佇列(Queue)和MSMQ(訊息佇列)的基礎使用
首先我們知道佇列是先進先出的機制,所以在處理併發是個不錯的選擇。然後就寫兩個佇列的簡單應用。 Queue 名稱空間 名稱空間:System.Collections,不在這裡做過多的理論解釋,這個東西非常的好理解。 可以看下官方文件:https://docs.microsof
【DP計劃】11.3——[BZOJ]股票交易(單調佇列優化DP)MEDIUM
Description 最近lxhgww又迷上了投資股票,通過一段時間的觀察和學習,他總結出了股票行情的一些規律。 通過一段時間的觀察,lxhgww預測到了未來T天內某隻股票的走勢,第i天的股票買入價為每股APi,第i天的股票賣出價為每股BPi(資料保證對於每個
【貪心】加工生產排程(雙機排程貪心問題)
問題 D: 【貪心】加工生產排程 時間限制: 1 Sec 記憶體限制: 64 MB 提交: 41 解決: 21 [提交] [狀態] [討論版] [命題人:外部匯入] 題目描述 有n個部件需在A、B機器上加工,每個工件都必須經過先A後B兩道工序。 已知:部件i在A
【Linux】程序間通訊(IPC)之訊息佇列詳解及測試用例
學習環境 Centos6.5 Linux 核心 2.6 什麼是訊息佇列? 訊息佇列是SystemV版本中三種程序通訊機制之一,另外兩種是訊號量和共享儲存段。訊息佇列提供了程序間傳送資料塊的方法,而且每個資料塊都有一個型別標識。訊息佇列是基於訊息的,而管
【php】面向對象(一)
打電話 成員方法 駝峰命名 bject 內部 自動 正在 自己 div 1. 學習面向對象的目標: a) 語法的學習: b) 編程思想的學習: i. 過程化: ii. 面向對象:2. 比較(有對象和沒對象的區別) a) 沒對象: i. 我餓了 自己
【php】面向對象(五)
row 操作類 面向對象 ssa getline var pre span 錯誤信息 一、 類型約束: a) 約束函數可傳入的參數類型二、 類的遍歷 a) Foreach b) 可以將類當中的所有成員屬性遍歷出來三、 關於操作類與對象的一些函數: a) 判斷函數
【php】面向對象(三)
lamp1 變量 步驟 efi 第一個 面向對象 我們 ati 單例 知識點關鍵詞:FSCICATS一、 f => final: a) 是一個修飾符,用來修飾類和成員方法 b) 使用final修飾符修飾的類不能被繼承,使用final修飾符修飾的成員方法,不能被重寫
Android自己定義組件系列【6】——進階實踐(3)
err ack XML @+ layout apk get ast edi 上一篇《Android自己定義組件系列【5】——進階實踐(2)》繼續對任老師的《可下拉的PinnedHeaderExpandableListView的實現》進行了分析,這一篇計劃中間插一段“知識點
【Cloud Foundry】Could Foundry學習(一)——Could Foundry淺談
art lock mod out isp ted 組成 .com pop 在閱讀的過程中有不論什麽問題。歡迎一起交流 郵箱:[email protected]/* */ QQ:1494713801 Cloud Foundry是VMware
Android自己定義組件系列【5】——進階實踐(2)
col fonts tle 適配 pack tom ica void log 上一篇《Android自己定義組件系列【5】——進階實踐(1)》中對任老師的《可下拉的PinnedHeaderExpandableListView的實現》前一部分進行了實現,這一篇我們來看看Ex
Python自動化開發課堂筆記【Day06】 - Python進階(類)
擴展性 程序 lex 類名 人物 優點 ini 參數 self. 類與對象 面向過程的程序設計: 優點:極大的降低了程序的復雜度 缺點:一套流水線或者流程就是用來解決一個問題,生產汽水的流水線無法生產汽車,即使能,也是得大改,改一個組件,牽一發而動全身面向對象的程序設計
【原創】淺談webview(一)——驚鴻一瞥
版本 開發 spa 占用 混合 原創 大量 功能性 內存泄漏 眾所周知,APP開發過程中經常會通過webview實現HTML5(H5)的渲染,實現H5和Native的混合開發(Hybrid Development)。Hybrid Development可以加速
luogu_3379 【模板】最近公共祖先(LCA)
span oid ont return mes ace print next using #include<bits/stdc++.h>using namespace std;#define N 500010*2struct edge{int v,next;}