首页 > 其他分享 >P1627 [CQOI2009] 中位数

P1627 [CQOI2009] 中位数

时间:2022-11-07 11:57:01浏览次数:45  
标签:int mid 中位数 CQOI2009 MAXN P1627 currnum first

Idea

注意到中位数只关心数据的相对大小, 因此考虑从目标数字开始往两边求前/后缀和, 接下来使用乘法原理来进行组合即可. 可以用map统计.

第一次感觉只要看一看扩展, 当时忽略了这些扩展之间可以组合.

Code

#include <bits/stdc++.h>
using namespace std;

#define MAXN 320005
#define F(i, a, b) for(int i=a; i<=b;i++)
#define Fd(i, a, b) for(int i=a;i>=b;i--)

map<int, int> l, r;
int a[MAXN], b[MAXN];

signed main(){
	int n, B; cin>>n>>B;
	F(i, 1, n) cin>>a[i];
	int mid = -1;
	F(i, 1, n) {
		if(a[i]==B) {
			b[i] = 0;
			mid = i;
		}
		else if(a[i]>B) b[i] = 1;
		else b[i] = -1;
	}
	int currnum = 0;
	F(i, mid, n) {
		currnum += b[i];
		r[currnum] ++;
	}
	currnum = 0;
	Fd(i, mid, 1){
		currnum += b[i];
		l[currnum] ++;
	}
	int ans = 0;
	for(auto i : l){
		// printf("(%d)+= %d * %d\n",i.first, i.second, r[-i.first]);
		ans += i.second*r[-i.first];
	}
	cout<<ans<<endl;
}

标签:int,mid,中位数,CQOI2009,MAXN,P1627,currnum,first
From: https://www.cnblogs.com/augpath/p/16865448.html

相关文章

  • 寻找两个正序数组的中位数
    题目给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。示例1:输......
  • 剑指offer——数据流中的中位数
    题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数......
  • 取m和n的中位数溢出解决办法
    在LeetCode上刷一道二分的简单题,需要计算m和n的中位数。通常的想法是直接如下即可:intmid=(m+n)/2;然而​​mid​​​存在溢出的风险,一种简单的解决办法是把​​mid......
  • PAT_甲级_1029 Median (25分) (C++)【求中位数/递增序列合并】
    目录​​1,题目描述​​​​题目大意​​​​2,思路​​​​3,代码​​1,题目描述SampleInput:4111213145910151617 SampleOutput:13题目大意求两递增序列的中位数(......
  • 力扣-4-寻找两个正序数组的中位数
    中位数的定义是什么?有序数列中位置中间的数字如果中间位置有两个返回则他们的平均值,所以这里的返回值是个double要求时间复杂度为log(m+n),也就是说只对两个数组做一次遍......
  • 寻找两个正序数组的中位数
    给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log(m+n)) 。 示例......
  • 4. 寻找两个正序数组的中位数
    给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。示例1:输入:nums1......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:寻找两个正序数组的中位数
    题目:给定两个大小分别为m和n的正序(从小到大)数组 nums1和 nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。 示例1:输入:num......
  • [编程题]堆棋子 中位数
    ​​https://www.nowcoder.com/questionTerminal/27f3672f17f94a289f3de86b69f8a25b​​由于x[]和y[]是独立的,所以贡献可以单独考虑如果选出k个,x[1...k]那么肯定是去到中位......
  • 困难-4. 寻找两个正序数组的中位数
    这题难了我几天,重写了几遍代码,一直感觉不对,算法复杂度没降下来,直到今天10月7日完成### 解题思路不停判断区间1是否相交区间2假如中位数存在num1中,不停地对nums1取中......