利用数目找中位数(牛客第七场E)
https://ac.nowcoder.com/acm/contest/887/E
树状数组做法(代码有注释)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=4e5+;
int x[M],y[M],l[M],r[M],ans[M<<],tot;
ll bit1[M<<],bit2[M<<];
int lowbit(int x){
return x&(-x);
}
void add(ll bit[], int p, int x) {
while(p<=tot){
bit[p]+=x;
p+=lowbit(p);
}
}
ll query(ll bit[], int p) {
ll ans = ;
while(p>){
ans+=bit[p];
p-=lowbit(p);
}
return ans;
}
int main(){
int n;
scanf("%d",&n);
ll a1,a2,b1,b2,c1,c2,m1,m2;
scanf("%lld%lld%lld%lld%lld%lld",&x[],&x[],&a1,&b1,&c1,&m1);
scanf("%lld%lld%lld%lld%lld%lld",&y[],&y[],&a2,&b2,&c2,&m2);
for(int i=;i<=n;i++){
if(i>){
x[i]=(a1*x[i-]+b1*x[i-]+c1)%m1;
y[i]=(a2*y[i-]+b2*y[i-]+c2)%m2;
}
l[i]=min(x[i],y[i])+;
r[i]=max(x[i],y[i])+;
ans[++tot]=l[i];
ans[++tot]=r[i]+; }
///离散化处理
sort(ans+,ans+tot+);
tot=unique(ans+,ans+tot+)-ans-;
ll nownum=;
for(int i=;i<=n;i++){ nownum+=(r[i]-l[i]+);///加上当前区间数的数目 ,为了达到用数目找中位数的目的
int L=lower_bound(ans+,ans+tot+,l[i])-ans;///找到l r分别在离散化后的位置
int R=lower_bound(ans+,ans+tot+,r[i]+)-ans;
///bit1 记录的是总共数的数目的前缀和,所以左右端点就那样赋值,前缀和起来就是总数:r[i]-l[i]+1;
add(bit1,L,-l[i]);
add(bit1,R,r[i]+);
//bit2 记录L的数目的前缀和
add(bit2,L,);
add(bit2,R,-);
///二分找
L=,R=1e9;
while(L<R){
int midd=(L+R)>>;
int pos=upper_bound(ans+,ans+tot+,midd)-ans-;
///若查询到query(bit2)不等于0,说明midd前面有若干个左区间端点 没有对应的右区间端点,即query(bit1)算不完全,所以要加还给temp;
ll tmp=query(bit1,pos)+query(bit2,pos)*(midd+);
if(tmp<(nownum+)/){///用数目找中位数
L=midd+;
}else{
R=midd;
}
}
printf("%d\n",L);
}
return ;
}
利用数目找中位数(牛客第七场E)的更多相关文章
- 牛客第七场 Sudoku Subrectangles
链接:https://www.nowcoder.com/acm/contest/145/J来源:牛客网 You have a n * m grid of characters, where each ...
- 牛客第七场 Minimum Cost Perfect Matching 规律
题意:1-n-1个数和1-n-1个数两两匹配,每次匹配将两个数的值进行与运算,要求每次匹配与运算的和相加最小,问满足匹配的配对方式 分析:打表前10个数与运算最小的匹配,我们发现,从n-1开始按位取反 ...
- 数据流中的中位数 牛客网 剑指Offer
数据流中的中位数 牛客网 剑指Offer 题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值.如果从数据流中读出偶数个数值,那么中位数就 ...
- 牛客第三场多校 H Diff-prime Pairs
链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...
- 牛客第五场 G max 思维
链接:https://www.nowcoder.com/acm/contest/143/G来源:牛客网 Give two positive integer c, n. You need to find ...
- uestc summer training #9 牛客第三场 BFS计数
G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...
- 牛客网第二场Jfarm(随机化+二维前缀和)
链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 White Rabbit has a rectangular farmland of n*m. ...
- 牛客网第一场E题 Removal
链接:https://www.nowcoder.com/acm/contest/139/E 来源:牛客网 Bobo has a sequence of integers s1, s2, ..., sn ...
- 牛客网第一场 A Monotonic Matrix
链接:https://www.nowcoder.com/acm/contest/139/A来源:牛客网 Count the number of n x m matrices A satisfying ...
随机推荐
- 吴裕雄--天生自然 JAVASCRIPT开发学习:DOM EventListener
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- jstl中遍历Map
在jstl中遍历Map和遍历List与数组一样,都是使用forEach标签. 例子: <%@ page import="java.util.Map" %> <%@ ...
- CSS 选择器权重计算规则(转)
其实,CSS有自己的优先级计算公式,而不仅仅是行间>内部>外部样式:ID>class>元素. 一.样式类型 1.行间 <h1 style="font-size: ...
- Windows系统 查询已开通的端口号和对外开放端口号
查询端口号开放情况: 查看该端口被那个PID所占用;方法一:有针对性的查看端口,使用命令: netstat –ano|findstr “<端口号>” netstat -a 补充说明: n ...
- EL表达式和JSTL(一)
一. 初始JavaBean 在软件开发时,有些数据时经常要用到的,为了方便进行移植,Sun公司提出了一种JavaBean技术,使用JavaBean对这些数据进行封装,做到一次编写,到处开发. Java ...
- UML-如何画操作契约?
1.在编写契约过程中,发现之前的领域模型不对,此时是否需要修改? 需要修改.包括:概念类.属性.关联.这就是不断迭代和进化 2.用例中复杂场景里的状态变化细节,描述过多导致用例臃肿,让人看不下去,因此 ...
- springCloud eureka服务治理集群增加安全认证
做为SpringCloud Netflix服务套件中的一部分,springCloud eureka基于Netflix Eureka做了二次封装,默认提供WEB管理页面及服务治理. 为了确保在生产环境中 ...
- 垃圾windows10更新遇到的问题
缘由 1.win10现在必须更新,不更新不给你用,关闭自动更新的方法都失效了,如果有人知道有效的方法还请私信指教一下.. 一个延迟几天的笨方法:当出现更新并关机或更新并重启时,把电源键设置成关机. 就 ...
- JavaScript学习笔记 - 进阶篇(3)- 流程控制语句
if语句 if语句是基于条件成立才执行相应代码时使用的语句. 语法: if(条件) { 条件成立时执行代码} 注意:if小写,大写字母(IF)会出错! 假设你应聘web前端技术开发岗位,如果你会HTM ...
- 移动端web前端开发
移动端浏览器现状 视口 meta视口标签 二倍图 移动端主流方案 移动端技术解决方案 移动端常见布局 1.流式布局(百分比布局) 2.flex布局 3.rem适配布局 1)rem单位 2)媒体查询 3 ...