求中位数应经常联想到二分

news/2025/3/18 13:59:37/文章来源:https://www.cnblogs.com/cjcf/p/18503259

题目链接:https://codeforces.com/contest/2008/problem/H

首先想了一会,随后想到了取模,但是由于这个q太大于是考虑是否可以实现动态变化最后还是没得出结果,遂看了题解。
原来这道题由于n的限制,所以可以对求出取模所对应的余数的取模区间
\([k*x,k*x+m]\),于是复杂度到了\(nlogn\)(前缀和预处理),随后怎么去找这个中位数呢?二分!,然后复杂度
就到了\(n*logn*logn\)。联想到今年icpc网络赛的的一道求中位数的题,中位数的求法大概率是与中位数一起考察的,这点得牢记

#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<deque>
#include<cctype>
#include<string.h>
#include<math.h>
#include<time.h>
#include<random>
#include<stack>
#include<string>
#define ll                                    long long 
#define lowbit(x) (x & -x)
using namespace std;
mt19937 rnd(time(0));
const ll mod=1e9+7;
const ll N=2e5+5;
ll ksm(ll x,ll y)
{ll ans=1;while(y){if(y&1)ans=(ans%mod*x%mod)%mod;x=x%mod*(x%mod)%mod;y>>=1;}return ans%mod%mod;
}
ll gcd(ll x,ll y)
{if(y==0)return x;else return gcd(y,x%y);
}
void fio()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
}
ll a[2500000];
ll pre[2500000];
ll d[2500000];
bool vis[2500000];
int main()
{ll t;cin>>t;while(t--){ll n,q;cin>>n>>q;map<ll,ll>f;for(ll i=1;i<=n;i++)cin>>a[i],f[a[i]]++;for(ll i=1;i<=n;i++)pre[i]=pre[i-1]+f[i],vis[i]=0,d[i]=0;//O(1)while(q--){ll x;cin>>x;if(vis[x]>0){cout<<d[x]<<" ";continue;}ll l=0,r=x-1;while(l<r){ll mid=(l+r)>>1;ll ans=0;for(ll k=1;k*x<=n;k++){ll l1=k*x;ll r2=min(k*x+mid,n);ans+=pre[r2]-pre[l1-1];}ans+=pre[mid];//<=mid的有//cout<<mid<<endl;//cout<<ans<<endl;if(ans>=n/2+1){r=mid;}else l=mid+1;}cout<<r<<" ";d[x]=r;vis[x]=1;}cout<<endl;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/821891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA如何配置Java环境,jdk路径

前言 我们在使用IDEA开发Java应用时,一般第一步就是需要配置好我们的jdk环境,并且在IDEA里面配置jdk的安装路径。 那么,我们应该如何配置呢? 如何配置jdk路径 首先,我们点击【File】,再点击【Project Structure】。然后,我们点击下【Project】,点击【Edit】,选择jdk的…

IAP在线升级二

一.分析JumpToApp函数点击查看代码 void JumpToApp(uint32_t addr) { __disable_irq();//这个函数调用会禁用中断。在跳转到新的应用程序之前,通常需要确保当前的中断状态不会干扰跳转过程。uint32_t sp = *((volatile uint32_t *)(addr));//从addr指定的地址读取栈指针(Stac…

动态语言有哪些

在开头段落,请允许我一句言归正传地回答这个问题:动态语言主要有Python、JavaScript、Ruby、Perl、PHP和Groovy等。这类语言的主要特点是它们在运行期间能够改变其结构,如新的函数、对象、甚至代码可以被引入,已有的函数可以被删除或其他结构上的改变。这使得动态语言在写代…

C堆和栈的区别有哪些

在C编程中,堆和栈是两个重要的内存管理概念,它们在:1.分配方式;2.生命周期;3.内存管理;4.访问速度;5.使用场景等方面有明显的区别。本文将深入探讨C堆和栈之间的区别,以帮助程序员更好地理解如何使用它们。1.分配方式 堆:堆是动态分配的内存区域,程序员可以在运行时请…

激光雷达和毫米波雷达的区别

本文将深入探讨激光雷达(Lidar)和毫米波雷达(Millimeter Wave Radar)这两种远程感测技术之间的区别。虽然它们都用于测量距离和位置,但它们采用不同的传感技术和工作原理。我们将在以下几个方面详细比较激光雷达和毫米波雷达:工作原理、应用领域、性能受限因素和成本等方…

Paper Reading: Multi-class Imbalance Classification Based on Data Distribution and Adaptive Weights

针对当前多分类不平衡问题仅依靠不平衡比,以及数据集的不平衡信息无法在训练过程中动态调整的问题。本文首先提出了基于自适应分布的样本权值,将类间不平衡比、类内密度变量和自适应裕度综合起来处理多类不平衡。接着将提出的自适应样本权值与 AdaBoost 学习框架相结合,提出…

CRM工具中纷享销客、销售易怎么样

CRM系统对公司业务开展很有必要,它是对于销售机会的预先判定和年度战略决策依据。研究机构softwarepath调研了100家正在使用CRM的公司,结论是CRM完成选型的平均时间是11周,公司规模越大,选型时间越长。其中一个重要原因在于:无论国内国外,CRM都是竞争相当激烈的市场,你会…

redis安装与部署

一、下载 1、华为镜像站下载https://mirrors.huaweicloud.com/redis/2、将下载的资料包上传到Linux中3、解压缩文件tar -zxvf redis-7.0.10.tar.gz4、安装gcc,和tclyum install -y gcc yum install -y tcl5、进入解压目录执行下面的命令make MALLOC=libc6、编译完成后执行如下命…

如何进行多线程优化?

为了提高程序的运行效率,多线程优化成为了一种重要的方法。本文将详细指导你如何进行多线程优化:1.识别并行化机会;2.保证线程安全;3.选择正确的并发工具;4.避免死锁和竞态条件;5.优化线程间的通信。为了成功地实施多线程优化,首先需要了解程序的瓶颈所在。1.识别并行化…

E71 树形DP+二分 P3523 [POI2011] DYN-Dynamite

视频链接: P3523 [POI2011] DYN-Dynamite - 洛谷 | 计算机科学教育新生态// 树形DP+二分 O(nlogn) #include <iostream> #include <cstring> #include <algorithm> using namespace std; int read(){int x=0,f=1;char c=getchar();while(c>9||c<0)…

聊聊gitlab免费版和收费版本有哪些区别

GitLab,一款受欢迎的代码托管和持续集成工具,有多个版本,包括免费版(GitLab Community Edition)和多种收费版本(GitLab Enterprise Edition)。这些版本主要有以下不同:1、功能上的差异;2、性能与可扩展性;3、专业支持;4、集成与API;5、定价与许可;6、安全性与合规…

PHP与Ruby on Rails的性能比较

在比较PHP与Ruby on RAIls的性能时,我们需要考虑几个关键因素:执行速度、资源消耗、开发效率、社区支持、以及应用场景。PHP是一种广泛使用的开源脚本语言,执行速度快、资源消耗相对较低,尤其适合用于Web开发。相比之下,Ruby on Rails是一个基于Ruby的全栈Web应用框架,它…