HDU 4866 多校1 主席树+扫描线
终于是解决了这个题目了
不过不知道下一次碰到主席树到底做不做的出来,这个东西稍微难一点就不一定能做得出
离散化+扫描线式的建树,所以对于某个坐标二分找到对应的那颗主席树,即搜索出结果即可(因为是扫描线式的建树,找到对应的树之后,就知道该点上面的线段有多少条了)
其他就是普通主席树的操作了
主席树里面维护两个东西,一个就是普通的那种在该区间的节点数目,另外就是权值
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL __int64
using namespace std;
const int N =200010;
const int maxn=N*100;
int n,m,x,p,tot;
int t[N],T[N];
int c1[maxn],lson[maxn],rson[maxn];
LL c2[maxn];
struct node2
{
int h,id;
bool operator < (const node2 rhs) const
{
return h<rhs.h;
}
}y[N];
struct node
{
int d,h,id;
bool operator < (const node& rhs)const{
if (d!=rhs.d) return d<rhs.d;
else return h>rhs.h;
}
}seg[N];
int build(int l,int r)
{
int rt=++tot;
c1[rt]=c2[rt]=0;
if (l>=r) return rt;
int mid=(l+r)>>1;
lson[rt]=build(l,mid);
rson[rt]=build(mid+1,r);
return rt;
}
int inserts(int rt,int pos,int v1,LL v2)
{
int newrt=++tot;
int tmp=newrt;
c1[newrt]=c1[rt]+v1;
c2[newrt]=c2[rt]+v2;
int l=1,r=n;
while (l<r)
{
int mid=(l+r)>>1;
if (pos<=mid){
lson[newrt]=++tot;
rson[newrt]=rson[rt];
newrt=lson[newrt];
rt=lson[rt];
r=mid;
}
else{
rson[newrt]=++tot;
lson[newrt]=lson[rt];
newrt=rson[newrt];
rt=rson[rt];
l=mid+1;
}
c1[newrt]=c1[rt]+v1;
c2[newrt]=c2[rt]+v2;
}
return tmp;
}
LL query(int rt,int pos)
{
LL ret=0;
int l=1,r=n;
while (l<r)
{
int mid=(l+r)>>1;
if (c1[lson[rt]]>=pos){
r=mid;
rt=lson[rt];
}
else
{
pos-=c1[lson[rt]];
ret+=c2[lson[rt]];
rt=rson[rt];
l=mid+1;
}
}
return c2[rt]+ret;
}
int main()
{
int loc,a,b,c;
while (scanf("%d%d%d%d",&n,&m,&x,&p)!=EOF)
{
int cnt=0;
tot=0;
for (int i=1;i<=n;i++){
scanf("%d%d%d",&a,&b,&c);
y[i].h=c;
y[i].id=i;
seg[++cnt]=(node){a,c,i};
seg[++cnt]=(node){b,-c,i};
}
sort(seg+1,seg+1+cnt);
sort(y+1,y+1+n);
for (int i=1;i<=n;i++){
t[y[i].id]=i;
}
T[0]=build(1,n);
for (int i=1;i<=cnt;i++){
if (seg[i].h>=0)
T[i]=inserts(T[i-1],t[seg[i].id],1,seg[i].h);
else
T[i]=inserts(T[i-1],t[seg[i].id],-1,seg[i].h);
}
LL pre=1;
while (m--)
{
scanf("%d%d%d%d",&loc,&a,&b,&c);
int K;
K=(a%c*pre%c+b)%c;
if (K==0){
puts("0");
pre=0;
continue;
}
int id;
int l=1,r=cnt+1;
while (l<r)
{
int mid=(l+r)>>1;
if (seg[mid].d<loc || (seg[mid].d==loc && seg[mid].h>=0)){
id=mid;
l=mid+1;
}
else{
r=mid;
}
}
LL ans=query(T[id],K);
if (pre>p) ans*=2;
pre=ans;
printf("%I64d\n",ans);
}
}
return 0;
}
HDU 4866 多校1 主席树+扫描线的更多相关文章
- HDU 4866 Shooting 题解:主席树
这题的主要的坑点就是他给你的射击目标有重合的部分,如果你向这些重合的部分射击的话要考虑两种情况: 射击目标数量 ≥ 重合数量 : 全加上 射击目标数量 ≤ 重合数量 : 只加距离*射击目标数量 然而这 ...
- HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- POJ 2104&HDU 2665 Kth number(主席树入门+离散化)
K-th Number Time Limit: 20000MS Memory Limit: 65536K Total Submissions: 50247 Accepted: 17101 Ca ...
- hdu 4417 Super Mario (主席树)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4417 题意: 给你段长为n的序列,有q个询问,每次询问区间[l.r]内有多少个数小于等于k 思路: 之前用 ...
- hdu 4348 To the moon (主席树)
版权声明:本文为博主原创文章,未经博主允许不得转载. hdu 4348 题意: 一个长度为n的数组,4种操作 : (1)C l r d:区间[l,r]中的数都加1,同时当前的时间戳加1 . (2)Q ...
- HDU 4348 To the moon 主席树 在线更新
http://acm.hdu.edu.cn/showproblem.php?pid=4348 以前做的主席树没有做过在线修改的题做一下(主席树这种东西正经用法难道不是在线修改吗),标记永久化比较方便. ...
- HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)
版权声明:欢迎关注我的博客.本文为博主[炒饭君]原创文章,未经博主同意不得转载 https://blog.csdn.net/a1061747415/article/details/25471349 P ...
- HDU 4419 Colourful Rectangle --离散化+线段树扫描线
题意: 有三种颜色的矩形n个,不同颜色的矩形重叠会生成不同的颜色,总共有R,G,B,RG,RB,GB,RGB 7种颜色,问7种颜色每种颜色的面积. 解法: 很容易想到线段树扫描线求矩形面积并,但是如何 ...
- HDU 2665 && POJ 2104(主席树)
http://poj.org/problem?id=2104 对权值进行建树(这个时候树的叶子是数组b的有序数列),然后二分查找原数列中每个数在有序数列中的位置(即第几小),对每一个前缀[1,i]建一 ...
随机推荐
- 当你输入一个url链接发生了什么?
先看一张图 打开手机和pad的QQ 发送消息给QQ好友,此时发送了一个请求给服务器,服务器接受到后反馈给手机和pad发送消息成功,然后QQ好友就可以接受到消息了 电脑浏览器输入百度 打开台式电脑或者笔 ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 表格:表示一个警告的操作
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- CSS去掉背景颜色
background-color:transparent;
- Python中turtle绘图学习笔记和实例
一.既然本次讲的主角是turtle函数库,那肯定得先了解一下它是什么 turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位 ...
- 华为轮值CEO,富士康却坚持独裁,二者究竟有什么不一样?
谈到深圳龙华的大企业,人们会很自然地想到华为和富士康,两家公司毗邻,有两个门仅仅隔着一条马路,都是世界500强,对国家,对社区的经济发展有着重要贡献,员工压力最大的时候,也都出现过自杀的情况,一个讲究 ...
- Day3:关于地形生成
---恢复内容开始--- 今天桃子好像还是没什么动静,不过媳妇倒是有一点见红~ 希望这是马上要出来的前兆了~ 桃子都已经晃点我俩好多回了~ 已经都快习惯来她这个狼来了的征兆了~ ----------- ...
- Golang函数-递归函数
Golang函数-递归函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- mac flutter 创建过程及遇到的问题
参考: 1.入门: 在macOS上搭建Flutter开发环境 系统要求 2.mac配置环境变量 1.打开终端 2.clone flutter 命令: git clone -b beta https:/ ...
- springboot2.1以javabean整合rabbitmq及自动注入rabbitmqTemplate为空问题
springboot集成rabbitmq之前也写过,这次再来个总结,总体来讲比较简单 主要就是配置属性文件,将属性以javabean的形式注入,配置工厂,对象等原来以xml<bean>形式 ...
- ETC系列产品非接触式读卡器方案:SI522
随着科技的不断发展,出行上高速这是非常寻常的事.但是在很多节假日高峰时期,在高速路口塞车缴费给很多车主造成很大的烦心.为了解决这一系列的问题,科技发明了ETC这种便捷式缴费技术,让车主们顺畅通过高速路 ...