题目链接:HDU5806
题意:找出有多少个区间中第k大数不小于m.
分析:用尺取法可以搞定,CF以前有一道类似的题目.
1 #include<cstdio> 2 using namespace std; 3 typedef long long ll; 4 #define d\n I64d\n 5 int T,n,m,K,num,r,a[200010]; 6 ll ans; 7 int main() 8 { 9 scanf("%d",&T); 10 while (T--) 11 { 12 scanf("%d%d%d",&n,&m,&K); 13 for (int i=1;i<=n;i++) scanf("%d",&a[i]); 14 num=0;r=0;ans=0; 15 for (int i=1;i<=n;i++) 16 { 17 while (num<K&&r<n){r++;num+=(a[r]>=m);} 18 if (num<K) break; 19 ans+=n-r+1; 20 num-=(a[i]>=m); 21 } 22 printf("%d",ans); 23 } 24 }
本文介绍了解决HDU5806题目的方法,使用尺取法寻找区间中第k大数不小于给定值m的方案数。通过滑动窗口调整区间边界,有效计算满足条件的区间数量。
&spm=1001.2101.3001.5002&articleId=102116883&d=1&t=3&u=3f8b0c24b58d43f78d96e327bca48ef7)
583

被折叠的 条评论
为什么被折叠?



