利用数目找中位数(牛客第七场E)
2024-10-08 20:36:52
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 ;
}
最新文章
- 无聊拆中国银行密码器和农业银行U盾
- SQLserver技巧
- URL 路径长度限制(错误:指定的文件或文件夹名称太长)
- ios 数组排序
- iframe在ipad safari的显示
- Ant学习---第三节:使用Ant实现一个最小的项目编译
- VS2003 下GridControl的列显示成图片+文字的形式实现
- Ibatis中sqlmap参数map中还需要套list的情况如何写?
- Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析
- php 支持递归函数.递归函数就是调用函数本身.
- Spring Security(05)——异常信息本地化
- Failed to load c++ bson extension, using pure JS version
- 基于Avocado 的 QData MySQL自动化测试.md
- app后端设计(11)-- 系统架构(2014.12.05更新)
- 自定义注解(spring)
- 进一步聊聊weight initialization
- DB2在dbvisualizer 客户端执行begi/end 语句块
- 实现数据导出为.csv表格
- 系统wmiprvse.exe占用CPU非常高,求解决
- JDK7 AutoCloseable