HUD-5806 NanoApe Loves Sequence Ⅱ(二分)
2016-08-08 11:17
225 查看
问题描述
输入描述
输出描述
输入样例
输出样例
思路:用前缀和记录下到i时前面大于等于k的数的数目,然后枚举起点,二分找终点。
细节参见代码:
退役狗 NanoApe 滚回去学文化课啦! 在数学课上,NanoApe 心痒痒又玩起了数列。他在纸上随便写了一个长度为 nn 的数列,他又根据心情写下了一个数 mm。 他想知道这个数列中有多少个区间里的第 kk 大的数不小于 mm,当然首先这个区间必须至少要有 kk 个数啦。
输入描述
第一行为一个正整数 TT,表示数据组数。 每组数据的第一行为三个整数 n,m,kn,m,k。 第二行为 nn 个整数 A_iAi,表示这个数列。 1 \le T \le 10,~2 \le n \le 200000,~1 \le k \le n/2,~1 \le m,A_i \le 10^91≤T≤10, 2≤n≤200000, 1≤k≤n/2, 1≤m,Ai≤109
输出描述
对于每组数据输出一行一个数表示答案。
输入样例
1 7 4 2 4 2 7 7 6 5 1
输出样例
18
思路:用前缀和记录下到i时前面大于等于k的数的数目,然后枚举起点,二分找终点。
细节参见代码:
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<set> #include<map> #include<vector> #include<queue> #include<cmath> #include<algorithm> using namespace std; typedef long long LL; const int maxn=200000+10; int t; int n,m,k; int L,R,mid; int u; int sum[maxn]; bool judge(int x,int y){ if(sum[y]-sum[x-1]>=k) return true; return false; } int main() { scanf("%d",&t); while(t--){ memset(sum,0,sizeof(sum)); scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++){ scanf("%d",&u); if(u>=m) sum[i]=sum[i-1]+1; else sum[i]=sum[i-1]; } LL count=0; for(int i=1;i+k-1<=n;i++){ L=i+k-1; R=n; if(!judge(i,n)) continue; while(L<R){ mid=L+(R-L)/2; if(judge(i,mid)) R=mid; else L=mid+1; } count+=(n-L+1); } printf("%lld\n",count); } return 0; }
相关文章推荐
- HDU-5806 NanoApe Loves Sequence Ⅱ(two-pointer或二分)
- hdu 5806 NanoApe Loves Sequence Ⅱ(二分或尺取法)
- 5806 NanoApe Loves Sequence Ⅱ(尺取法)
- bestcoder #86 第三题 NanoApe Loves Sequence Ⅱ hdu 5806
- HDU 5806 NanoApe Loves Sequence Ⅱ(尺取法)
- HDU 5806 NanoApe Loves Sequence Ⅱ(前缀和)
- 【HDU】5806 - NanoApe Loves Sequence Ⅱ(尺取法)
- HDU - 5806 - NanoApe Loves Sequence Ⅱ 【思维尺取】
- HDU 5806:NanoApe Loves Sequence Ⅱ
- HDU 5806 NanoApe Loves Sequence Ⅱ(尺取)
- HDU 5806 NanoApe Loves Sequence Ⅱ(尺取+思维)——BestCoder Round #86 1003
- HDU 5806 NanoApe Loves Sequence
- Hdu-5806 NanoApe Loves Sequence(尺取法)
- hdu 5086 NanoApe Loves Sequence 【二分查找】
- HDU 5806 NanoApe Loves Sequence Ⅱ
- hdu 5806 NanoApe Loves Sequence Ⅱ
- HDU 5806 NanoApe Loves Sequence Ⅱ two pointers
- HDU5806 NanoApe Loves Sequence Ⅱ(二分ortwo-pointer)
- hdoj-5806-NanoApe Loves Sequence Ⅱ
- HDU 5806 NanoApe Loves Sequence Ⅱ尺取法