程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> hdu 5289 Assignment

hdu 5289 Assignment

編輯:關於C++

給你n個數和一個數k,求存在多少個區間的最大值減最小值小於等於k

用一個單調遞增序列和一個單調遞減序列維護一下數列,維護的時候,每一次把下標小的數從隊列中刪除。因為這個數已經對後面的答案造不成影響。然後從左到右不斷遍歷。如果滿足條件的話,就加上這個區間長度。

#include 
#include 
#include 
using namespace std;

int last,head;
int n,m,k;
int a[111111];

int que1[111111];
int que2[111111];
int pa[111111];
int pb[111111];

int main(){
    int T;
    scanf(%d,&T);
    while(T--){
            scanf(%d%d,&n,&k);
        for(int i=1;i<=n;i++){
            scanf(%d,&a[i]);
        }
        int l1=0;
        int l2 = 0;
        long long ans = 0;
        int l = 0;
        int r1 = -1;
        int r2 = -1;
        for(int i=1;i<=n;i++){
            while(l1<=r1&&a[que1[r1]]>a[i]) --r1;
            while(l2<=r2&&a[que2[r2]]=k){
                if(que1[l1]

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved