当前位置: 首页 > article >正文

H. Sakurako‘s Test

H. Sakurako's Test

原题

 本题通过前缀和和二分可以解决, 原理并不是很困难, 但是比较难想到

我们只需要对每一个 x, 二分求出中位数, 预处理好即可, 二分的检查通过求k倍的x可以在调和级数的时间内实现

代码

#include <bits/stdc++.h>
#define int long long

using namespace std;

const int N = 200010;

int n, m, k, q, ans, x;



void solve()
{
	cin >> n >> m;
	vector<int> a(n);
	vector<int> c(n + 1, 0ll);
	
	for (int i = 0; i < n; i ++ )
	{
		cin >> a[i];
//		记录每个数出现几次 
		c[a[i]] ++;
	}
	
	for (int i = 1; i <= n; i ++ )
	{
//		做前缀和 
		c[i] += c[i - 1];
	}
	
	int res[n + 1] = {0};
	
	for (int x = 1; x <= n; x ++ )
	{
		int l = 0, r = x;
		while (l < r)
		{
			int mid = (l + r) / 2;
			int cnt = c[mid];
//			调和级数, x 越大此处用时越小 
			for (int k = 1; k * x <= n; k ++ )
			{
				cnt += c[min(k * x + mid, n)] - c[k * x - 1];
			}
			if (cnt - 1 >= n / 2)
			{
				r = mid;
			}
			else
			{
				l = mid + 1;
			}
		}
		res[x] = l;
	}
	
	while (m -- )
	{
		int x;
		cin >> x;
		cout << res[x] << " ";
	}
	cout << endl;
}

signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int T = 1;
	cin >> T;
	while (T -- )
	{
		solve();
	}
}


http://www.kler.cn/a/322829.html

相关文章:

  • STM32 Option Bytes(选项字节)
  • AUTOSAR_EXP_ARAComAPI的7章笔记(5)
  • java小练习
  • 【JAVA】使用IDEA创建maven聚合项目
  • 对接阿里云实人认证
  • Spring整合Redis
  • 趋势外推法
  • Linux学习之路 -- 线程 -- 互斥
  • 20 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)
  • [SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
  • 虚假唤醒(Spurious Wakeup)详解:从概念到实践
  • laravel延迟队列 取消未支付超时订单订单
  • 堆排序,TopK问题|向上调整建堆|向下调整建堆(C)
  • Kafka系列之:安装使用kafka_exporter详细步骤
  • Agent智能体
  • 常见错误1:访问指针类型
  • 【Java异常】(简简单单拿捏)
  • Python(六)-拆包,交换变量名,lambda
  • vue3中使用echarts折线图初始化只显示一条数据,其余折线根据用户点击进行显示
  • 【java】前端RSA加密后端解密
  • 外贸电商系统卷轴模式开发:技术深度解析与实践
  • 联宇集团:如何利用CRM实现客户管理精细化与业务流程高效协同
  • 解决element树形结构切换节点,form表单缓存问题
  • 如何解决跨域请求中的 CORS 错误
  • 前端大模型入门:使用Transformers.js实现纯网页版RAG(一)
  • mobaxterm、vscode通过跳板机连接服务器