[CQOI2009]中位数图

Posted cq.tiancx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[CQOI2009]中位数图相关的知识,希望对你有一定的参考价值。

[CQOI2009]中位数图 这是一道OI真题,我们来看看题目:


顺便放下地址吧:[CQOI2009]中位数图

读了题目之后发现直接枚举是不行的,会超时,那么我们就得换种思路了,我们可以把大于目标数的数设置为1,小于目标数(题目中的b,下同)的设置为-1,然后只要包含目标数的区间的和为1则符合要求,然后应用前缀和的思想便可以快速解决!

我们来看看成功AC的代码吧:

#include<bits/stdc++.h>
using namespace std;
int n,b;
int a[100010],cnt[2*100010];
int ans;

int main()
    cin.tie(0);
    ios::sync_with_stdio(false);
    cin>>n>>b;
    int pos=0;//标记目标数的位置
    for(int i=1;i<=n;i++)
        int x;  cin>>x;
        if(x==b) a[i]=0,pos=i;
        if(x<b) a[i]=-1;
        if(x>b) a[i]=1;
    
    int s=0;//s用来装前缀/后缀和
    for(int i=pos-1;i>=1;i--)
        s+=a[i];
        cnt[s+n]++;
        if(!s) ans++;//后缀和为0的,符合要就 ,ans++
    
    s=0;
    for(int i=pos+1;i<=n;i++)
       s+=a[i];
       ans+=cnt[n-s];//与左边的进行匹配
       if(!s) ans++;//前缀和为0的,符合要就 ,ans++
    
    cout<<ans+1;
    return 0;

谢谢你的阅读,由于作者水平有限,难免有不足之处,若读者发现问题,还请批评,在留言区留言或者私信告知,我一定会尽快修改的。若各位大佬有什么好的解法,或者有意义的解法都可以在评论区展示额,万分谢谢。
写作不易,望各位老板点点赞,加个关注!

以上是关于[CQOI2009]中位数图的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1303: [CQOI2009]中位数图

「CQOI2009」中位数

[CQOI2009] 中位数 (前缀和)

BZOJ 1303: [CQOI2009]中位数图前缀和

bzoj 1303: [CQOI2009]中位数图

[BZOJ1303] [CQOI2009] 中位数图