设为首页 加入收藏

TOP

hdu 5289 Assignment
2015-07-22 20:10:02 来源: 作者: 【 】 浏览:14
Tags:hdu 5289 Assignment

给你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]
       
      
     
    
   

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇[C++设计模式]template 模板方法.. 下一篇HDU 5016 Mart Master II (树上点..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: