51nod 1275 连续子段的差异
分析:
1、首先是尺取,尺取到每一个区间,区间满足这个条件,最大-最小<=k;
2、对于一个动态区间,怎么维护他的最大值,最小值(的下标);——单调队列;
什么时候删掉头结点呢? 当我找到了当前区间的上限;我需要尺取移动头结点了;此时,单调队列不用怕,只要这个头不影响我的单调队列,我就可以不用管;否则弹掉;
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 const int maxn = 50000 + 5; 6 int a[maxn]; 7 8 9 int main() 10 { 11 int n,k; 12 scanf("%d%d",&n,&k); 13 for(int i=0;i<n;i++) 14 scanf("%d",&a[i]); 15 16 int ans = 0; 17 deque<int> Amin,Amax; //单调递减队列,单调递增队列 18 19 for(int i=0,j=0;i<n;i++) { 20 21 while(j<n) { 22 23 while(!Amin.empty()&&a[j]>=a[Amin.back()]) 24 Amin.pop_back(); 25 26 while(!Amax.empty()&&a[j]<=a[Amax.back()]) 27 Amax.pop_back(); 28 Amin.push_back(j); 29 Amax.push_back(j); 30 31 if(a[Amin.front()]-a[Amax.front()]<=k) 32 j++; 33 else break; 34 } 35 ans+=(j-i); 36 37 if(Amin.front()==i) 38 Amin.pop_front(); 39 if(Amax.front()==i) 40 Amax.pop_front(); 41 42 } 43 printf("%d\n",ans); 44 45 return 0; 46 }
View Code
转载于:https://www.cnblogs.com/TreeDream/p/6803877.html
51nod 1275 连续子段的差异相关推荐
- 51nod 1275 连续子段的差异(twopointer+单调队列)
对于每一个i找到最近的j满足最大值-最小值>K,对答案的贡献为j-i,用单调队列维护最值即可 #include<iostream> #include<cstdlib> # ...
- 【单调队列】51nod 1275 连续子段的差异
题面在这里 单调队列的经典题-- 发现一个合法的区间的所有子区间都是合法的 那么枚举右端点,维护最小的左端点 相当于每次加入一个值,然后右移左端点,使得区间内的差值≤k\le k 如何快速获取最大/最 ...
- 解题报告:SP1043 GSS4 - Can you answer these queries III(GSS线段树八部曲之三)(区间最大连续子段和)
要注意输入的数据有坑,x可能大于y- 我们可以模块化编程,使得整个代码井井有条 函数可以重名,只要参数不一样就行. 来源 yxc老师的上课板书 然后就是简单的代码了 #include<iostr ...
- 51nod 1049 最大子段和
题目: N个整数组成的序列a[1],a[2],a[3],-,a[n],求该序列如a[i]+a[i+1]+-+a[j]的连续子段和的最大值.当所给的整数均为负数时和为0. 例如:-2,11,-4,13, ...
- CodeForces - 1486D Max Median(二分+最长连续子段和)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在从长度至少为 kkk 的连续子段中,找到最大的中位数 题目分析:做过平均数的模型:POJ - 2018 Best Cow Fences ...
- CodeForces - 1373D Maximum Sum on Even Positions(最大连续子段和)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a ,允许选择一个子串进行翻转,问最后可以得到的,偶数位置的数字之和的最大值是多少 题目分析:模拟几次不难发现,我们翻转的长度必须是偶数才能有 ...
- CodeForces - 1359D Yet Another Yet Another Task(最大连续子段和)
题目链接:点击查看 题目大意:选出一个连续子段和后,会减去相应区间内的最大值,问在此情况下的最大连续子段和是多少 题目分析:因为每个元素的取值很小,所以可以枚举每个元素作为最大值,然后依次求最大连续子 ...
- POJ - 2018 Best Cow Fences(二分+最长连续子段和)
题目链接:点击查看 题目大意:给出n个正整数,求一个平均数最大的.长度不小于L的连续子段 题目分析:因为这个题目的答案满足二分的性质,也就是若二分的平均数小于答案,则更小的平均数肯定都满足答案(因为这 ...
- POJ - 1050 To the Max(最大连续子段和,线性dp)
题目链接:点击查看 题目大意:给出一个n*n的矩阵,每个点都有一个权值,现在要从中选取一个子矩阵要求权值和最大,问这个最大权值和是多少 题目分析:因为是要求子矩阵的权值和最大的问题,我们可以直接维护一 ...
最新文章
- linux进程--自旋锁和互斥锁的区别(十五)
- java依赖和约束有啥区别_Java – Maven依赖关系太多了
- .NET Core 中导入导出Excel
- centos7安装oracle12c 三
- gradle 编译java配置文件_Andriod(三):配置文件build.gradle与AndroidManifest.xml
- 10进制转62进制 java_两种方法实现10进制和62进制互转 | 学步园
- C++的STL标准库学习(queue)队列(第四篇)
- opencv图像处理8-卷积
- Javascript常用对象的属性和方法
- csdn下载频道积分规则
- Linux下的Vivado安装——以Ubuntu为例
- 除了php云和骑士还有什么_PHP云人才系统 VS 骑士cms人才系统
- java混淆工具zelix比较_Java逆向基础之混淆器
- Molecular Contrastive Learning of Representations via Graph Neural Networks
- Scheme 语言 第一次的感触!
- item_sku - 获取sku详细信息
- c语言 不用锁存器 数码管倒计时,倒计时器课程设计.doc
- 20本必读的用户体验书目
- Upload上传@20210412
- 搜索引擎排名都选乐云seo_百度官网排名-搜索引擎算法优化