[CQOI2009]中位数图

[CQOI2009]中位数图

http://www.nowcoder.com/questionTerminal/e80eb142b3c044efb70113114cb27cea

是个还行的思维题.跟我昨天出的题差不多.
样例解释:
4
724
57243
5724316
思路找下这个值所在的位子,记录为0,把小于它的计为-1,把大于它的计为1.
然后就是用个map记录,把当前记录为0,因为必须要经过这个点,所以map只能记录前面的数.然后中间的那个数不是太好处理,单独拿出来处理一下.
代码:

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
map<int,int>mp;
int a[N];
int b[N];
int main()
{
    int n,t,val,pos,ans=0,sum=0;
    cin>>n>>t;
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]==t) {b[i]=0;val=a[i];pos=i;}
    }
    mp[0]=1;
    for(int i=1;i<=n;i++)
    {
        if(a[i]>val) b[i]=1;
        if(a[i]<val) b[i]=-1;
        sum+=b[i];
        if(i<pos) mp[sum]++;
        if(i>pos&&mp[sum])  ans+=mp[sum];
    }//处理中位数后的数
    sum=0;
    for(int i=pos;i;i--)
    {
        sum+=b[i];
        if(!sum) ans++;
    }
    cout<<ans<<endl;
    return 0;
}
全部评论

相关推荐

12-20 13:19
已编辑
曲阜师范大学 Java
点赞 评论 收藏
分享
12-18 22:04
已编辑
杭州电子科技大学 Java
程序员牛肉:我觉得是这样的,你现在有点病急乱投医了。你要问自己这样一个问题: 我找实习的目的是什么?为了挣钱还是增强个人实力?如果是为了挣钱那没得说,如果我是为了增强个人实习,那我异地去一个小厂实习真的有收益吗?这个收益是否大过我参加学校的项目或者自学?我记得你们杭电有那种实验室专门负责运维学校的项目的。 找实习只是一个手段而已,不要把他变成目的。不要病急乱投医。
实习简历求拷打
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务