百度之星 hdu5701 中位数计数

http://acm.hdu.edu.cn/showproblem.php?pid=5701

给出一个序列,取其中的任何一个连续的序列,该序列的数从小到大排列,待更新,,,

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN = 8005;
 6 int num[MAXN];
 7 int arr[MAXN];
 8 int sum[MAXN*2];
 9 int cnt[MAXN];
10 int main()
11 {
12     int n;
13     while(~scanf("%d",&n))
14     {
15         for(int i = 1;i<=n;i++)
16             scanf("%d",&num[i]);
17         for(int i = 1;i<=n;i++)
18         {
19             int temp = num[i];
20             memset(arr,0,sizeof(arr));
21             memset(sum,0,sizeof(sum));
22             int res = 0;
23             for(int j = i-1;j>=1;j--)
24             {
25                 arr[j] = arr[j+1]+((num[j]>temp)?-1:1);
26                 sum[arr[j]+n]++;
27                 if(arr[j]==0)
28                     res++;
29             }
30             for(int j = i+1;j<=n;j++)
31             {
32                 arr[j] = arr[j-1]+((num[j]>temp)?1:-1);
33                 if(sum[arr[j]+n]>0)
34                     res=res+sum[arr[j]+n];
35                 if(arr[j]==0)
36                     res++;
37             }
38             cnt[i] = res+1;
39         }
40         printf("%d",cnt[1]);
41         for(int i = 2;i<=n;i++)
42             printf(" %d",cnt[i]);
43         printf("\n");
44     }
45     return 0;
46 }
时间: 2024-08-12 10:24:13

百度之星 hdu5701 中位数计数的相关文章

hdu-5701 中位数计数(中位数)

题目链接: 中位数计数 Problem Description 中位数定义为所有值从小到大排序后排在正中间的那个数,如果值有偶数个,通常取最中间的两个数值的平均数作为中位数. 现在有nn个数,每个数都是独一无二的,求出每个数在多少个包含其的区间中是中位数. Input 多组测试数据 第一行一个数n(n≤8000) 第二行n个数,0≤每个数≤10?^9??, Output N个数,依次表示第ii个数在多少包含其的区间中是中位数. Sample Input 5 1 2 3 4 5 Sample Ou

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个数,每个数都是独一无二的,求出每个数在多少个包

2016百度之星总结帖

2016百度之星总结帖 测试赛 选的2015资格赛的部分题目,第二题字符串处理,第三题map计数 1001 大搬家 f f (x) = x 两次置换后回到原位 dp a->b && b->a,考虑n个数 如果它独自成对,那么就有s[n-1]: 如果它与前面某个成对,首先可以有n-1个可取,然后每个都有s[n-2]: 故s[n] = s[n-1] + (n-1)s[n-2]; 1004 放盘子 今天他向来访者们提出一个恶俗的游戏.他和来访者们轮流往一个正多边形内放盘子.最后放盘子

2016百度之星 补题记

2016"百度之星" - 复赛(Astar Round3) 拍照 思路:先把所有的线段投影到x轴,然后将所有线段的起末坐标存进数组,排序后从坐标最小开始枚举.如果遇到起点标志,就加一:结束点标志减一.如此即可求出同一时刻,遇到当前线段结束点时,有多少线段包含在内 /************************************************************** Problem:hdu 5417 User: youmi Language: C++ Result

【百度之星2014~初赛(第二轮)解题报告】Chess

声明 笔者最近意外的发现 笔者的个人网站http://tiankonguse.com/ 的很多文章被其它网站转载,但是转载时未声明文章来源或参考自 http://tiankonguse.com/ 网站,因此,笔者添加此条声明. 郑重声明:这篇记录<[百度之星2014~初赛(第二轮)解题报告]Chess>转载自 http://tiankonguse.com/ 的这条记录:http://tiankonguse.com/record/record.php?id=667 前言 最近要毕业了,有半年没做

2016-5-21 letwetell Round3 (百度之星初赛,dfs序)

halfapri(- o -)Y { 1.2016百度之星Round2A 题目链接 题解链接 1001 All X 循环节 1002 Sitting in Line 状压dp 1003 Snacks 1004 D Game 1005 BD String 找规律 1006 Gym Class 贪心+topo 2.2012多校第7场 hdu4366 Successor 线段树 + dfs序 }

2014百度之星资格赛题解

比赛链接:点击打开链接 ,,杭电把比赛关了代码都找不到了.. 无责任民科还是mark一下好了.. HDU 4823 Energy Conversion 把式子变换一下发现是一个等比数列,高速幂就可以. #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> using namespace std; #define ll __int64 #define inf 10000

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆