zoukankan      html  css  js  c++  java
  • P1627 [CQOI2009]中位数

    P1627 [CQOI2009]中位数
    对于只考虑相对大小的情况,考虑离散化,或者转化成1,0,-1,1表示比它打,0表示相等,-1表示比它小
    这个题就是前缀和统计一下答案

    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <algorithm>
    #include <map>
    #include <cstring>
    #define inf 2147483647
    #define N 1000010
    #define p(a) putchar(a)
    #define For(i,a,b) for(int i=a;i<=b;++i)
    //by war
    //2019.8.26
    using namespace std;
    int n,b,k,ans;
    int a[N];
    map<int,int>m;
    void in(int &x){
        int y=1;char c=getchar();x=0;
        while(c<'0'||c>'9'){if(c=='-')y=-1;c=getchar();}
        while(c<='9'&&c>='0'){ x=(x<<1)+(x<<3)+c-'0';c=getchar();}
        x*=y;
    }
    void o(int x){
        if(x<0){p('-');x=-x;}
        if(x>9)o(x/10);
        p(x%10+'0');
    }
    
    signed main(){
        in(n);in(b);
        For(i,1,n){
            in(a[i]);
            if(a[i]>b)
                a[i]=1;
            else
                if(a[i]==b){
                    k=i+1;
                    a[i]=0;
                }
            else
                a[i]=-1;
        }
        For(i,k,n){
            a[i]+=a[i-1];
            m[a[i]]++;
            if(a[i]==0)
                ans++;
        }
        for(int i=k-2;i;i--){
            a[i]+=a[i+1];
            ans+=m[-a[i]];
            if(a[i]==0)
                ans++;
        }
        o(ans+1);
        return 0;
    }
  • 相关阅读:
    算法 在一个递增的二维数组中查找一个数
    java web----网络编程基础
    java----集合(Map)
    java----集合(List、set)
    java----数组
    java面试----1
    java----NIO
    java----commons-io
    java----文件操作
    爬虫----爬取答案
  • 原文地址:https://www.cnblogs.com/war1111/p/11412515.html
Copyright © 2011-2022 走看看