当前位置:网站首页>HDU-5806-NanoApeLovesSequenceⅡ(尺取法)
HDU-5806-NanoApeLovesSequenceⅡ(尺取法)
2022-07-28 05:28:00 【__Simon】
NanoApe Loves Sequence Ⅱ
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others)Total Submission(s): 1348 Accepted Submission(s): 588
In math class, NanoApe picked up sequences once again. He wrote down a sequence with n numbers and a number m on the paper.
Now he wants to know the number of continous subsequences of the sequence in such a manner that the k-th largest number in the subsequence is no less than m.
Note : The length of the subsequence must be no less than k.
In each test case, the first line of the input contains three integers n,m,k.
The second line of the input contains n integers A1,A2,...,An, denoting the elements of the sequence.
1≤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
尺取法:
整个过程分为4步:
1.初始化左右端点
2.不断扩大右端点,直到满足条件
3.如果第二步中无法满足条件,则终止,否则更新结果
4.将左端点扩大1,然后回到第二步
#include <stdio.h>
int a[200010];
int main(){
int t,i;
int n,m,k;
int l,r,tmp;
long long sum;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;i++){
scanf("%d",a+i);
}
sum=tmp=l=r=0;
while(1){
if(r>=n) break;
while(1){
if(r>=n) break;
if(a[r]>=m){
tmp++;
}
if(tmp==k){
sum+=(n-r);
break;
}
r++;
}
if(r>=n) break;
while(1){
if(l>r) break;
if(a[l]<m){
sum+=(n-r);
}
else{
l++;
tmp--;
break;
}
l++;
}
r++;
}
printf("%lld\n",sum);
}
return 0;
}别人的代码:
代码1:
#include <cstdio>
#define N 200050
int a[N];
long long d[N];
int main()
{
int T,n,m,k;
scanf("%d",&T);
while(T--){
scanf("%d %d %d",&n,&m,&k);
int t=0;
long long sum=0;
for(int i=1; i<=n; i++){
scanf("%d",&a[i]);
if(a[i]>=m){
d[++t]=i;
if(t>=k){
if(t==k) sum+=d[1]*(n-i+1);
else sum+=(d[t-k+1]-d[t-k])*(n-i+1);
}
}
}
printf("%lld\n",sum);
}
return 0;
}代码2:
#include <cstdio>
#define N 200050
int a[N];
int main(){
int T,n,m,k;
scanf("%d",&T);
while(T--){
scanf("%d %d %d",&n,&m,&k);
int t=0;
long long sum=0;
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
int r=1,num=0;
for(int i=1;i<=n;i++){
while(r<=n&&num<k){
if(a[r]>=m) num++;
r++;
}
if(num>=k) sum+=n-r+2;
if(a[i]>=m) num--;
}
printf("%lld\n",sum);
}
return 0;
}代码3:
#include <cstdio>
const int MAXN = 200000 + 9;
int a[MAXN];
void solve(){
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
for (int i = 0; i < n; i++){
scanf("%d", &a[i]);
}
long long ans = 0;
int r;
int t = 0;
for (r = 0; r < n; r++) {
if (a[r] >= m) t++;
if (t == k) break;
}
ans += (n - r);
for (int l = 1; l < n; l++) {
if (a[l - 1] >= m) {
t--;
r++;
for (;r < n; r++) {
if (a[r] >= m) t++;
if (t == k) break;
}
if (r >= n) break;
ans += (n - r);
} else {
ans += (n - r);
}
}
cout << ans << endl;
}
int main(){
//freopen("in", "r", stdin);
int t;
scanf("%d",&t);
while(t--){
solve();
}
}边栏推荐
- Redis implementation of distributed lock and analysis of the main process of redismission distributed lock
- [c language] - step by step to achieve minesweeping games
- redis缓存设计与性能优化
- Bug experience related to IAP jump of stm32
- [realize the simple version of minesweeping games]
- Skimming records -- sequence traversal of binary tree
- ZOJ Problem 1005 jugs
- archery数据库审核平台部署
- Graphic pipeline foundation (I)
- 关于Shader KeyWord的整理
猜你喜欢

Skimming records -- sequence traversal of binary tree
![[basic knowledge of binary tree]](/img/4f/9fc27a30b958af26537c299e150ee9.png)
[basic knowledge of binary tree]

Analysis of the semaphore source code of AQS

Everything you don't know about time complexity is here

Battle plague Cup -- strange shape

图形管线基础(番外篇)
![[dynamic planning -- the best period for buying and selling stocks series 3]](/img/9f/f6c07264f5ffaa0fdfcc724c713e83.png)
[dynamic planning -- the best period for buying and selling stocks series 3]

yapi漏洞挂马程序chongfu.sh处理

redis实现分布式锁思路及redission分布式锁主流程分析

SSAO By Computer Shader(二)
随机推荐
Analysis of reentrantlock source code of AQS
Dynamic memory management function of C language
软件测试的生命周期(流程)
Optimization ideas from ordinary query commodities to highly concurrent query commodities
OJ 1253 ordering problem
How to store floating point data in memory
中国剩余定理 个人理解
OJ 1284 记数问题
测试面试题集锦(三)| 计算机网络和数据库篇(附答案)
Analysis of cyclicbarrier source code of AQS
OJ 1018 counting game
Leetcode brush question diary sword finger offer II 048. serialization and deserialization binary tree
Development of clip arbitrage / brick carrying arbitrage system
OJ 1045 reverse and add
技术分享 | 接口自动化测试中,如何做断言验证?
[pta-- use queues to solve the problem of monkeys choosing kings]
[dynamic planning -- the best period for buying and selling stocks series 3]
Dynamic programming -- simple question type of climbing stairs
准备开始写博客了
关于Shader KeyWord的整理