hdu5289单调队列
来源:互联网 发布:淘宝新开店铺 编辑:程序博客网 时间:2024/06/17 01:04
#include <cstdio>#include <cstring>#include <queue>#include <algorithm>using namespace std ;#define LL __int64deque <LL> deq1 , deq2 ;//单调队列,deq1最大值,deq2最小值LL a[100010] ;int main() { int t , n , i , j ; LL k , ans ; scanf("%d", &t) ; while( t-- ) { scanf("%d %I64d", &n, &k) ; for(i = 0 ; i < n ; i++) scanf("%I64d", &a[i]) ; if(k == 0) { printf("0\n") ; continue ; } while( !deq1.empty() ) deq1.pop_back() ; while( !deq2.empty() ) deq2.pop_back() ; for(i = 0 , j = 0 , ans = 0; i < n ; i++) {//i在前,j在后 while( !deq1.empty() && deq1.back() < a[i] ) deq1.pop_back() ; deq1.push_back(a[i]) ; while( !deq2.empty() && deq2.back() > a[i] ) deq2.pop_back() ; deq2.push_back(a[i]) ; while( !deq1.empty() && !deq2.empty() && deq1.front() - deq2.front() >= k ) { ans += (i-j) ; //printf("%d %d,%I64d %I64d\n", i , j, deq1.front() , deq2.front() ) ; if( deq1.front() == a[j] ) deq1.pop_front() ; if( deq2.front() == a[j] ) deq2.pop_front() ; j++ ; } } while( j < n ) { ans += (i-j) ; j++ ; } printf("%I64d\n", ans) ; } return 0 ;}
阅读全文
0 0
- hdu5289单调队列
- HDU5289 Assignment RMQ / 单调队列
- hdu5289(2015多校1)--Assignment(单调队列)
- hdu5289(2015多校1)--Assignment(单调队列)
- hdu5289 Assignment(多校第一场第二题:RMQ+找规律或单调队列+找规律)
- HDU5289
- HDU5289
- 单调栈 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 单调队列
- 大话PCIe:BAR空间和TLP
- tesseract-ocr使用以及训练方法
- Python文件读写
- ThinkPHP3.2中所有的单字母方法
- 博客专家申请规则
- hdu5289单调队列
- MATLAB安装libsvm常见问题
- 【洛谷】P1582倒水
- tEST 1 for NOIP 2017.9.9.
- 1032 链表
- leetcode 171. Excel Sheet Column Number(C语言)
- 数据库学习——聚合函数
- 系统学习C++(4)
- Fiddler Script 优化