福州大学第十五届程序设计竞赛 E - 谁还不是个宝宝 FZU 2288 HDU 5701 中位数计数 暴力思维

洪尼玛有n个朋友,n个朋友排成一排,每个朋友都有一个自身的价值Ai,并且每个朋友自身的价值均不相同。现在每个朋友都能与他左右的若干个人组成一个区间,也可以他自己一个人组成一个区间。若这个区间的人数为奇数个,那么我们称其为“可行区间”。将一个 “可行区间”里所有朋友按价值排序后,中间的那个朋友就是这个“可行区间”里的“宝宝”。求每个朋友是多少个“可行区间”里的“宝宝”?


Input
多组测试数据。


输入第一行为正整数n,表示朋友个数。


接下来一行,有n个互不相同的正整数Ai,表示第i个朋友的价值。


n≤1000,Ai≤10^9


Output
输出n个正整数,依次表示第i个朋友是多少个“可行区间”里的“宝宝”。


Sample Input

1 2 3 4 5
Sample Output
1 2 3 2 1
Hint

例如3能组成的“可行间”有:{3},{1,2,3},{2,3,4},{3,4,5},{1,2,3,4,5} 共5个区间,其中在{3},{2,3,4},{1,2,3,4,5} 这3个“可行区间”里是宝宝。

题意:找第i个数是多少个区间的中位数,区间由连续子序列按从小到大的顺序排好

思路:1000的数据暴力即可,因为这个序列刚开始的无序的,构成的区间是有序的,所以我们可以枚举ai左边的数字,在这个序列内统计找在ai左边比ai大的数字-比ai小的数字数量=ai右边比ai小的数字-比ai大的数字的数量,如果在处理一边出现等于0的情况,则结果加一,处理的时候注意一下数组即可。

#include <iostream>
#include <algorithm>
#include <vector>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <map>
#include <set>
#include <cmath>
#include <queue>
using namespace std;
typedef long long ll;
const int N = 1e3+5;
int a[N],aa[2*N];
int ans[N];
int main()
{
    int n;
    while(scanf("%d",&n) != EOF)
    {
        memset(ans,0,sizeof(ans));
        for(int i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(int i=0;i<n;i++)
        {
            int num=0;
            memset(aa,0,sizeof(aa));
            for(int j=i-1;j>=0;j--)
            {
                if(a[j]<a[i])
                    num--;
                else
                    num++;
                if(!num) ans[i]++; //特殊情况结果+1
                aa[num+N]++;   //得到左边比ai大的数字-比ai小的数字数量
            }
            num = 0;
            for(int j=i+1;j<n;j++)
            {
                if(a[j]<a[i])
                    num--;
                else
                   num++;
                if(!num)
                ans[i]++;
                ans[i] += aa[N-num];//一次加上左边所有的相符的数量
            }
        }
        for(int i=0; i<n; i++)
        {
            if(i!=n-1)
                printf("%d ",ans[i]+1);//加上本身
            else
                printf("%d\n",ans[i]+1);

        }
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/deepseazbw/article/details/80572883
今日推荐