hakerrank Almost sorted interval 单调队列
来源:互联网 发布:淘宝咸鱼电话 编辑:程序博客网 时间:2024/06/08 09:49
关键词:单调队列,区间统计
题意:统计数组中符合条件的区间个数,条件是:区间左侧数最小,右侧数最大
解法:
1.先判断哪些数可以作为区间左侧点。首先,数组中的最小值可以,然后可以判断该点左侧的所有点都不可以;该点右侧中的最小值也可以,依次类推,可以得到一个递增序列,其实这个递增序列就是数组的单调队列!
2.注意到,当以当前数结尾时,不是所有单调队列中的点都可以作为区间开头!如何统计以当前数结尾,可以作为开头的点的个数?如果当前节点大于之前所有数的最大值x1,那么最大值左侧的所有在单调递增队列中的元素都可以作为区间开头,;如果当前节点大于x1到当前节点中所有数的最大值x2(不包含x1),那么x1到x2中所有在单调队列中的点都可以作为区间开头,由此也可以得到一个递减的单调队列!因此递增单调队列中的元素可以通过构造递减单调队列进行分组。
3.若当前数加入后,递增队列中元素数量-1,那么单减队列中队尾值-1,直到队尾值为0.即队尾前面的元素到队尾元素中所有递增队列中的点全部被剔除了,此时应该将单减队列队尾元素剔除。加入单减队列,被剔除的元素值要加入当前值,这就是以当前点结尾的满足条件区间个数!
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;const int maxn = 1000000+10;int n;int a[maxn];long long ans;long long cnt[maxn];int main(){ //FILE* fpt; //fpt=fopen("b.txt", "w+"); //freopen("a.txt","r",stdin); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); cnt[i]=1; } int que1[maxn],tail1=1,top1=0; int que2[maxn],tail2=1,top2=0; que1[++top1]=1,que2[++top2]=1; ans=1; for(int i=2;i<=n;i++){ while(tail1<=top1&&a[que1[top1]]>a[i]){ cnt[que2[top2]]--; if(!cnt[que2[top2]]) top2--; top1--; } que1[++top1]=i; while(tail2<=top2&&a[que2[top2]]<=a[i]){ cnt[i]+=cnt[que2[top2]]; top2--; } que2[++top2]=i; ans+=cnt[i]; } printf("%lld\n",ans);}
0 0
- hakerrank Almost sorted interval 单调队列
- duoj Almost sorted interval 单调队列
- Almost Sorted Array(HDU 5532 单调递增子序列)
- 简单dp hdu 5532 Almost Sorted Array nlogn 的最长非严格单调子序列
- hdu-5532 Almost Sorted Array(最长单调不xx序列)
- HDU5532-Almost Sorted Array
- HDU5532 Almost Sorted Array
- Almost Sorted Array HDU
- 【HDU5532 2015长春赛区F】【LIS+剪枝】Almost Sorted Array 最多移除一元素后单调 O(n)
- hdu 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- hdoj 5532 Almost Sorted Array
- 【HDU】 5532 Almost Sorted Array
- HDU 5532 Almost Sorted Array
- hdu5532 Almost Sorted Array(LIS)
- hdoj 5532 Almost Sorted Array
- HDU 5532:Almost Sorted Array
- 一台电脑连入三个节点的集群ssh配置
- Python网络编程:E-mail服务(一)原理篇
- C#再学习之从0开始(0)
- 通信网络基础-端到端的传输协议总结
- 错误 the type "xxxx" is defined in an assembly that is not refernced.You must add a reference to assem
- hakerrank Almost sorted interval 单调队列
- 创建新会话
- JavaOO-②
- Java IO详解
- Java时间格式转换
- Java两种比较器的介绍和实例
- Io 异常: The Network Adapter could not establish the connection
- 使用AngularJS的$http服务与服务端进行数据交互
- vnc分辨率修改