2019牛客暑期多校训练营(第七场)E-Find the median(思维+树状数组+离散化+二分)
题意:给n个操作,每次和
(1e9范围内)即往数组里面插所有
的所有数,求每次操作后的中位数
思路:区间离散化然后二分答案,因为小于中位数的数字恰好有个,这显然具有单调性。那么问题就转化为如何求小于等于某个数x的数一共有多少个。
考虑以下两种情况:假设左端点小于等于x的区间一共有q个
- 如果x不落在任何一个区间,那么答案显然是
- 否则假设x同时落在m个区间中,答案是
做一点点数学上的变换:令
注意到在第一种情况下m=0,所以我们就成功归约到只有一种情况。对区间的左右端点离散化,用两个树状数组分别维护 的前缀和和m以后,我们就能够
地判断一个解是否可行。总复杂度
,M是因为取值范围是1e9
Code
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = 400010; ll n, cnt, tot;
ll x[maxn], y[maxn], l[maxn], r[maxn];
int a1, b1, c1, a2, b2, c2, m1, m2;
ll z[maxn<<1], bit1[maxn<<1], bit2[maxn<<1]; void add(ll a[], int i, int x) {
while (i<=cnt) {
a[i] += x;
i += i&(-i);
}
}
ll query(ll a[], int i){
ll res = 0;
while (i>0) {
res += a[i];
i -= i&(-i);
}
return res;
}
void read() {
cin>>n;
cin>>x[1]>>x[2]>>a1>>b1>>c1>>m1;
cin>>y[1]>>y[2]>>a2>>b2>>c2>>m2;
for(int i = 1; i <= n; i++){
if(i>2){
x[i] = (a1*x[i-1]+b1*x[i-2]+c1)%m1;
y[i] = (a2*y[i-1]+b2*y[i-2]+c2)%m2;
}
l[i] = min(x[i],y[i])+1;
r[i] = max(x[i],y[i])+1;
z[++cnt] = l[i]; z[++cnt] = r[i]+1;
}
sort(z+1,z+cnt+1);
cnt = unique(z+1,z+cnt+1)-z-1;
} int main()
{
read();
for(int i = 1; i <= n; i++) {
tot += r[i]-l[i]+1;
int L=lower_bound(z+1,z+cnt+1,l[i])-z, R=lower_bound(z+1,z+cnt+1,r[i]+1)-z;
add(bit1,L,-l[i]), add(bit1,R,r[i]+1);
add(bit2,L,1), add(bit2,R,-1);
//二分查找
int left = 1, right = 1e9;
while(left<right) {
int mid = (left+right)/2;
int q = upper_bound(z+1,z+cnt,mid)-z-1;
ll tmp = query(bit1, q)+query(bit2, q)*(mid+1);
if(tmp<(tot+1)/2) left = mid+1;
else right = mid;
}
cout<<left<<endl;
}
return 0;
}
有的地方没用long long 就WA了,在蕊芬学姐的指导下改过来了~
2019牛客暑期多校训练营(第七场)E-Find the median(思维+树状数组+离散化+二分)的更多相关文章
- 2019牛客暑期多校训练营(第九场)D-Knapsack Cryptosystem(思维+子集和)
>传送门<题意:给你一个有n个元素的数组,一个sum,让你找到数组的子集使得子集元素和等于sum,保证只有一个解决方案. (其中1≤n≤36,0≤ sum<9*1018,0<a ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
随机推荐
- VMware 16.1虚拟机安装
VMware 16.1创建虚拟机 1.1首先打开我们安装好的VMware点击创建新的虚拟机 典型为自动安装,接口位默认 自定义安装更自由,可以把按需求选择 VMware16版本,只能选择Worksta ...
- Ubuntu上好用的截图工具——flameshot
前言 堪称完美的截图工具--flameshot,windows上人们习惯性的使用QQ自带的截图工具Ctrl+Alt+A或者WeChat自带的截图工具Alt+A,若您是一位使用聊天工具截图多年的&q ...
- 醒醒!Python已经支持中文变量名啦!
最近,我在翻阅两本比较新的 Python 书籍时,发现它们都犯了一个严重的低级错误! 这两本书分别是<Python编程:从入门到实践>和<父与子的编程之旅>,它们都是畅销书,都 ...
- Linux 入门教程:00 Background
Linux 为何物? 就是一个操作系统. Linux 历史: 操作系统始于二十世纪五十年代,当时的操作系统能运行批处理程序.批处理程序不需要用户的交互,它从文件或者穿孔卡片读取数据,然后输出到另外一个 ...
- 在Jetbrain IDE中自定义TODO功能
好的IDE能为开发以及学习源码带来效率的提升,今天要介绍的就是Jetbrain家族中IDE自带的TODO功能,我认为利用好它,能够大大的提升阅读源码的效率. 假设我现在需要去阅读源代码,看了半天我终于 ...
- oracle分区表分区栏位NULL值测试
实验在分区栏位为NULL时,分区表的反应 1.创建普通的分区表 CREATE TABLE MONKEY.TEST_PART_NULL_NORMAL ( ID NUMBER, ADD_DATE DATE ...
- 实操|如何将 Containerd 用作 Kubernetes runtime
日前专为开发者提供技术分享的又拍云 OpenTalk 公开课邀请了网易有道资深运维开发工程师张晋涛,直播分享<Containerd 上手实践 >,详细介绍 Containerd 的发展历程 ...
- Doge.jpg 的背后是什么,你知道么?
图片,是我们生活中最常见的信息载体,作为一个日常生活中无处不在的事物,我们已经很习惯静态或者动态的图片了.大家也了解静态图片主要是jpg/png格式,动态图片主要为 gif.那你有没有过一瞬间的疑惑: ...
- REUSE_ALV_FIELDCATALOG_MERGE函数
今天使用REUSE_ALV_FIELDCATALOG_MERGE函数,就是获取不到fieldcat, 搞了半天才发现,原来参数要全部大写才行!!小写字符就是获取不到,唉,悲哀...
- Q-Q图原理详解及Python实现
[导读]在之前的<数据挖掘概念与技术 第2章>的文章中我们介绍了Q-Q图的概念,并且通过调用现成的python函数, 画出了Q-Q图, 验证了Q-Q图的两个主要作用,1. 检验一列数据是否 ...
