HDU 5701 中位数计数 暴力

老题了,附上黄学长链接一发,直接改改就AC了,http://hzwer.com/1216.html

#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e4+5;
int num[N],sum[N],l[N*2],r[N*2],a[N];
int n;
int get(int x){
    int p,ans=0;
    memset(sum,0,sizeof(sum));
    memset(l,0,sizeof(l));
    memset(r,0,sizeof(r));
    for(int i=1;i<=n;i++)
    {
        if(a[i]>x)num[i]=1;
        else if(a[i]==x){num[i]=0;p=i;}
        else num[i]=-1;
    }
    l[n]=1;r[n]=1;
    for(int i=p-1;i>=1;i--)
       {sum[i]=sum[i+1]+num[i];l[sum[i]+n]++;}
    for(int i=p+1;i<=n;i++)
       {sum[i]=sum[i-1]+num[i];r[sum[i]+n]++;}
    for(int i=0;i<=2*n-1;i++)ans+=l[i]*r[2*n-i];
    return ans;
}
int main()
{
    while(~scanf("%d",&n)){
      for(int i=1;i<=n;++i)
       scanf("%d",&a[i]);
      for(int i=1;i<n;++i){
        printf("%d ",get(a[i]));
      }
      printf("%d\n",get(a[n]));
    }
    return 0;
}

时间: 2024-10-19 16:03:46

HDU 5701 中位数计数 暴力的相关文章

HDU 5701 中位数计数( 2016&quot;百度之星&quot; - 初赛(Astar Round2B) 思维 + 暴力)

传送门 中位数计数 Time Limit: 12000/6000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 852 Accepted Submission(s): 335 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含

hdu 5701 中位数计数 思路题

中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 909    Accepted Submission(s): 346 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包

HDU - 5701 中位数计数

中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. Input多组测试数据 第一行一个数n(n≤8000)n(n≤8000) 第二行nn个数,0≤0≤每个数≤109≤109,OutputNN个数,依次表示第ii个数在多少包含其的区间中是中位数.Sample Input 5 1 2 3 4 5 Sample Output 1 2 3 2 1 解法:对于每个数字

HDU 4499 Cannon (暴力搜索)

题意:在n*m的方格里有t个棋子,问最多能放多少个炮且每个炮不能互相攻击(炮吃炮) 炮吃炮:在同一行或同一列且中间有一颗棋子. #include <stdio.h> #include <iostream> #include <algorithm> #include <string.h> #include <queue> #include <math.h> #define M 50 #define LL long long using

51nod 1682 中位数计数

1682 中位数计数基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. Input 第一行一个数n(n<=8000) 第二行n个数,0<=每个数<=10^9 Output N个数,依次表示第i个数在多少包含其的区间中是中位数. Input示例 5 1 2 3 4 5

HDU 4902 线段树||暴力

给定一个序列,两种操作 1:把一段变成x. 2:把一段每个数字,如果他大于x,就变成他和x的gcd,求变换完后,最后的序列. 线段树解法:用lazy标记下即可,优化方法还是很巧妙的, Accepted 4902 515MS 3308K 1941 B C++ #include "stdio.h" #include "string.h" struct node { int l,r,x;// 在叶子节点代表值,树节点代表成端更新的lazy操作. }data[400010]

HDU 4831 Scenic Popularity 暴力模拟

Scenic Popularity Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 340    Accepted Submission(s): 110 Problem Description 临近节日,度度熊们最近计划到室外游玩公园,公园内部包括了很多的旅游景点区和休息区,由于旅游景点很热门,导致景点区和休息区都聚集了很多人.所以度度熊

hdu 5701(区间查询思路题)

中位数计数 Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 999    Accepted Submission(s): 383 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有n个数,每个数都是独一无二的,求出每个数在多少个包

HDU 4961 Boring Sum 暴力

题意:对于所有的A[I],同时找到左边和右边离它最近且是它的倍数的数相乘最后加起来求和. 解题思路:n*sqrt(n)的算法,开始以为过不了,wa了两发因为lld I64d对拍一个小时发现一个小时前交的代码没错只是没变I64d,..具体思路是枚举每个a[i]的因子,找离它最近的那个更新,如果已经没更新就不用更新了.用两个辅助数组记录最近的就行. 解题代码: 1 // File Name: 1002.cpp 2 // Author: darkdream 3 // Created Time: 201