HDU - 4866 主席树 二分
题意:在x轴\([1,X]\)内的上空分布有n个占据空间\([L_i,R_i]\),高度\(D_i\)的线段,射中线段的得分为其高度,每次询问从x轴的\(x\)往上空射的最近k个线段的总得分,具体得分制看题
按高度对线段进行排序,那么如果我们能\(O(logn)\)内查询到某一时间段的占据\(x\)的线段个数,那么由占据\(x\)的个数的单调性就能在\(O(log^2n)\)内找到符合的最近k个线段
而某一时间段占据某位置的线段个数那就对应于主席树,二分对应于某一历史版本的根
注意由于查询必然经过叶子,那么我们就可以实现lazy不下传,只要打到它最后要覆盖的节点即可
还有空间要乘64,乘32的话直接T(?)
#include<bits/stdc++.h>
#define rep(i,j,k) for(int i=j;i<=k;i++)
#define rrep(i,j,k) for(int i=j;i>=k;i--)
#define erep(i,u) for(int i=head[u];~i;i=nxt[i])
#define print(a) printf("%lld",(ll)(a))
#define printbk(a) printf("%lld ",(ll)(a))
#define println(a) printf("%lld\n",(ll)(a))
using namespace std;
const int MAXN = 1e5+11;
const int MAXM = 2e6+11;
typedef long long ll;
ll read(){
ll x=0,f=1;register char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct LINE{
int l,r,d;
bool operator < (const LINE &rhs) const{
return d<rhs.d;
}
}line[MAXN];
typedef pair<ll,ll> P;
struct FST{
ll val[MAXN<<6];
int cnt[MAXN<<6];
int lc[MAXN<<6],rc[MAXN<<6];
int T[MAXN],tot;
void init(){tot=0;}
int build(int l,int r){
int cur=++tot;
cnt[cur]=val[cur]=lc[cur]=rc[cur]=0;
if(l==r) return cur;
int mid=l+r>>1;
lc[cur]=build(l,mid);
rc[cur]=build(mid+1,r);
return cur;
}
inline void copy(int cur,int old){
lc[cur]=lc[old];
rc[cur]=rc[old];
cnt[cur]=cnt[old];
val[cur]=val[old];
}
int update(int old,int l,int r,int L,int R,ll v){
int cur=++tot;
copy(cur,old);
//cnt[cur]++;
if(L<=l&&r<=R){
val[cur]+=v;
cnt[cur]++;
return cur;
}
int mid=l+r>>1;
if(L<=mid) lc[cur]=update(lc[old],l,mid,L,R,v);
if(R>mid) rc[cur]=update(rc[old],mid+1,r,L,R,v);
return cur;
}
P query(int cur,int l,int r,int k){
P p=P(cnt[cur],val[cur]);
if(l==r) return p;
int mid=l+r>>1;
if(k<=mid){
P t=query(lc[cur],l,mid,k);
return P(p.first+t.first,p.second+t.second);
}
else{
P t=query(rc[cur],mid+1,r,k);
return P(p.first+t.first,p.second+t.second);
}
}
}fst;
int n,m,X,PP;
int main(){
while(cin>>n>>m>>X>>PP){
rep(i,1,n){
line[i].l=read();
line[i].r=read();
line[i].d=read();
}
sort(line+1,line+1+n);
fst.init(); fst.T[0]=fst.build(1,X);
rep(i,1,n) fst.T[i]=fst.update(fst.T[i-1],1,X,line[i].l,line[i].r,line[i].d);
ll pre=1;
rep(i,1,m){
ll x=read();
ll a=read();
ll b=read();
ll c=read();
int lo=0,hi=n,mid;
ll k=(a*pre+b)%c;
P p;
while(lo<hi){
mid=lo+(hi-lo)/2;
p=fst.query(fst.T[mid],1,X,x);
if(p.first>=k) hi=mid;
else lo=mid+1;
}
P res=fst.query(fst.T[lo],1,X,x);
if(pre>PP) res.second<<=1;
pre=res.second;
println(res.second);
}
}
return 0;
}
HDU - 4866 主席树 二分的更多相关文章
- HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分)
HDU6621 K-th Closest Distance HDU2019多校训练第四场 1008(主席树+二分) 传送门:http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 5919 主席树(区间不同数的个数 + 区间第k大)
Sequence II Time Limit: 9000/4500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Tot ...
- 2018湘潭邀请赛C题(主席树+二分)
题目地址:https://www.icpc.camp/contests/6CP5W4knRaIRgU 比赛的时候知道这题是用主席树+二分,可是当时没有学主席树,就连有模板都不敢套,因为代码实在是太长了 ...
- BZOJ.1926.[SDOI2010]粟粟的书架(前缀和 主席树 二分)
题目链接 题意: 在给定矩形区域内找出最少的数,满足和>=k.输出数的个数.两种数据范围. 0~50 注意到(真没注意到...)P[i,j]<=1000,我们可以利用前缀和预处理. num ...
- 计蒜客 38229.Distance on the tree-1.树链剖分(边权)+可持久化线段树(区间小于等于k的数的个数)+离散化+离线处理 or 2.树上第k大(主席树)+二分+离散化+在线查询 (The Preliminary Contest for ICPC China Nanchang National Invitational 南昌邀请赛网络赛)
Distance on the tree DSM(Data Structure Master) once learned about tree when he was preparing for NO ...
- POJ 6621: K-th Closest Distance(主席树 + 二分)
K-th Closest Distance Time Limit: 20000/15000 MS (Java/Others) Memory Limit: 524288/524288 K (Jav ...
- Super Mario HDU 4417 主席树区间查询
Super Mario HDU 4417 主席树区间查询 题意 给你n个数(编号从0开始),然后查询区间内小于k的数的个数. 解题思路 这个可以使用主席树来处理,因为这个很类似查询区间内的第k小的问题 ...
- HDU 6278 主席树(区间第k大)+二分
Just h-index Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)To ...
- HDU - 6621 K-th Closest Distance 主席树+二分答案
K-th Closest Distance 主席树第二波~ 题意 给你\(n\)个数\(m\)个询问,问\(i\in [l,r]\)计算每一个\(|a_{i}-p|\)求出第\(k\)小 题目要求强制 ...
随机推荐
- Go语言特性
1.入口,go有且只有一个入口函数,就是main函数 liteide (IDE)的 一个工程(文件夹)只能有且只有一个main函数 package main import "fmt" ...
- TFS(Visual Studio Team Services) git认证失败 authentication fails 的解决方案
问题描述 TFS 在visual studio中使用正常,可是git pull运行失败,提示 authentication fails. 初步判断原因为默认的 credential.helper 与 ...
- 常用工具类——StringUtils
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...
- CentOS 7 下 ifconfig command not found 解决办法
1.查看ifconfig命令是否存在 查看 /sbin/ifconfig是否存在 2.如果ifconfig命令存在,查看环境变量设置 [root@localhost ~]# echo $PATH 如果 ...
- es学习-映射管理
2.2.1 增加映射 url:http://192.168.0.108:9200/yingshe/_mapping/user/(前提 索引存在,如索引不存在 请按照上一篇创建索引添加映射) 参数: { ...
- Android canvas bug
安卓4.1.1-4.1.2的webkit在渲染canvas元素时有bug. 具体表现是出现重影,即canvas的clearRect()方法不能彻底清空画布,仍然保留之前某个状态当“背景”. 目前的修复 ...
- IE6,7,8 CSS HACK
1.区别IE和非IE浏览器CSS HACK代码 #divcss5{ background:blue; /*非IE 背景藍色*/ background:red \9; /*IE6.IE7.IE8背景紅色 ...
- Alpha冲刺(四)
Information: 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Details: 组员1(组长)柯奇豪 过去两天完成了哪些任务 文章基本的存储.列表生成显示 展示G ...
- jquery cookie用法
jquery cookie用法(获取cookie值,删除cookie) cookie在jquery中有指定的cookie操作类,下面我先来介绍我们在使用cookie操作类时的一些问题,然后介绍正确的使 ...
- freePCRF免费版体验
[摘要]遍寻网络数昼夜,未得开源PCRF,亦未得有参考价值的PCRF相关文档.所幸觅得免费体验版freePCRF软件.可窥见PCRF设计思路.方法:PCC规则定义.管理策略:遂记录安装.体验心得. f ...