【bzoj2161】布娃娃 权值线段树
题目描述
输入
输出
输出一个整数,代表所有布娃娃谜团答案的和除以19921228的余数。
样例输入
3
2 3 4 3 1 4 5 2 3 6 9 1 1 2 3 4
样例输出
4
题目大意
给你若干个区间,每个区间有一个权值。现在对于若干个点,求所有包含该点的区间中权值第k大的是多少。
题解
权值线段树
由于询问不是强制在线的,因此可以把所有位置排序,然后扫一遍。
对于每段区间,把它看成两个点:$l$位置加入,$r$位置删除。把每个区间的两个点和询问点以坐标为关键字放到一起排序,坐标相同的按照加入、询问、删除的顺序排序,然后从左向右扫一遍,扫到加入就把权值加入到权值线段树中;扫到询问就在权值线段树中查询第k大;扫到删除就在权值线段树中删除。
时间复杂度$O(n\log n)$。
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 100010
#define lson l , mid , x << 1
#define rson mid + 1 , r , x << 1 | 1
using namespace std;
typedef long long ll;
struct data
{
int p , org , id;
data(int p0 = 0 , int org0 = 0 , int id0 = 0) {p = p0 , org = org0 , id = id0;}
bool operator<(const data &a)const {return p == a.p ? org > a.org : p < a.p;}
}a[N * 3];
int P[N] , C[N] , L[N] , R[N] , v[N] , si[N << 2];
void update(int p , int a , int l , int r , int x)
{
si[x] += a;
if(l == r) return;
int mid = (l + r) >> 1;
if(p <= mid) update(p , a , lson);
else update(p , a , rson);
}
int query(int k , int l , int r , int x)
{
if(l == r) return l;
int mid = (l + r) >> 1;
if(k <= si[x << 1 | 1]) return query(k , rson);
else return query(k - si[x << 1 | 1] , lson);
}
int main()
{
int n , Padd , Pfirst , Pmod , Pprod , Cadd , Cfirst , Cmod , Cprod , Ladd , Lfirst , Lmod , Lprod , Radd , Rfirst , Rmod , Rprod , i , ans = 0;
scanf("%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d" , &n , &Padd , &Pfirst , &Pmod , &Pprod , &Cadd , &Cfirst , &Cmod , &Cprod , &Ladd , &Lfirst , &Lmod , &Lprod , &Radd , &Rfirst , &Rmod , &Rprod);
P[1] = Pfirst % Pmod;
for(i = 2 ; i <= n ; i ++ ) P[i] = ((ll)P[i - 1] * Pprod + Padd + i) % Pmod;
C[1] = Cfirst % Cmod;
for(i = 2 ; i <= n ; i ++ ) C[i] = ((ll)C[i - 1] * Cprod + Cadd + i) % Cmod;
L[1] = Lfirst % Lmod;
for(i = 2 ; i <= n ; i ++ ) L[i] = ((ll)L[i - 1] * Lprod + Ladd + i) % Lmod;
R[1] = Rfirst % Rmod;
for(i = 2 ; i <= n ; i ++ ) R[i] = ((ll)R[i - 1] * Rprod + Radd + i) % Rmod;
for(i = 1 ; i <= n ; i ++ )
{
if(L[i] > R[i]) swap(L[i] , R[i]);
a[i * 3 - 2] = data(L[i] , 1 , i);
a[i * 3 - 1] = data(R[i] , -1 , i);
a[i * 3] = data(P[i] , 0 , i);
v[i] = C[i];
}
sort(v + 1 , v + n + 1);
for(i = 1 ; i <= n ; i ++ ) C[i] = lower_bound(v + 1 , v + n + 1 , C[i]) - v;
sort(a + 1 , a + 3 * n + 1);
for(i = 1 ; i <= 3 * n ; i ++ )
{
if(a[i].org) update(C[a[i].id] , a[i].org , 1 , n , 1);
else if(si[1] >= a[i].id) ans = (ans + v[query(a[i].id , 1 , n , 1)]) % 19921228;
}
printf("%d\n" , ans);
return 0;
}
【bzoj2161】布娃娃 权值线段树的更多相关文章
- BZOJ 2161 布娃娃(权值线段树)
题意 给n<1e5个娃娃,每个娃娃有属性\(p\),\(c\),\(l\),\(r\)(均在ll范围内),问你对每个娃娃\(i\),满足所有\(l_j\leq p_i\leq r_j\)的娃娃\ ...
- BZOJ_2161_布娃娃_权值线段树
BZOJ_2161_布娃娃_权值线段树 Description 小时候的雨荨非常听话,是父母眼中的好孩子.在学校是老师的左右手,同学的好榜样.后来她成为艾利斯顿第二 代考神,这和小时候培养的良好素质是 ...
- 【树状数组套权值线段树】bzoj1901 Zju2112 Dynamic Rankings
谁再管这玩意叫树状数组套主席树我跟谁急 明明就是树状数组的每个结点维护一棵动态开结点的权值线段树而已 好吧,其实只有一个指针,指向该结点的权值线段树的当前结点 每次查询之前,要让指针指向根结点 不同结 ...
- 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP
2892: 强袭作战 Time Limit: 50 Sec Memory Limit: 512 MBSubmit: 45 Solved: 30[Submit][Status][Discuss] D ...
- BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)
题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...
- 动态求区间K大值(权值线段树)
我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...
- 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题
“队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄> 线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...
- 【BZOJ3685】【zkw权值线段树】普通van Emde Boas树
原题传送门 因为马上要开始搞树套树了,所以学了一波权值线段树...毕竟是会点zkw线段树的,所以zkw线段树大法好! 解题思路: 介绍一下权值线段树吧,其实感觉就是线段树的本义,就是你用线段树维护了数 ...
- BZOJ_3685_普通van Emde Boas树_权值线段树
BZOJ_3685_普通van Emde Boas树_权值线段树 Description 设计数据结构支持: 1 x 若x不存在,插入x 2 x 若x存在,删除x 3 输出当前最小值,若不存 ...
随机推荐
- iOS 集成支付宝过程中 我遇到的一些坑,请大家注意啦(ALI69错误,ALI64错误)
支付宝很早一段时间就集成了,之前由于一直忙于开发就没有总结,今天整理桌面的时候看到,当时做支付时候的一些散落的笔记,就稍微整理一下,给大家分享一下. 第一:当时调用支付宝的时候,总是调不起来,进过断点 ...
- 欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响
项目中出现了二分类数据不平横问题,研究总结下对于类别不平横问题的处理经验: 为什么类别不平横会影响模型的输出? 许多模型的输出类别是基于阈值的,例如逻辑回归中小于0.5的为反例,大于则为正例.在数据不 ...
- x5webview 微信H5支付
mWebView.setWebViewClient(new WebViewClient() { // @Override // public boolean shouldOverrideUrlLoad ...
- 牛客小白月赛5 I 区间 (interval) 【前缀和】
链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...
- pycharm clion rider 注册
JetBrains 公司出品的pycharm clion rider 专业版本都需要注册才能运行,这里有个免费注册方法: JetBrains授权服务器2017.10.7授权方法:激活时选择Licens ...
- Linux的链接文件
Linux的链接文件======================================== Linux的链接文件分为硬链接文件(hard link )和软链接文件( symbolic lin ...
- Openstack搭建(流水账)
Openstack管理三大资源:1.网络资源2.计算资源3.存储资源 Keystone 做服务注册 Glance 提供镜像服务 Nova 提供计算服务 Nova scheduler决策虚拟主机创建在哪 ...
- (转)规划从 OpenGL ES 2.0 到 Direct3D 的移植
如果你移植 iOS 或 Android 平台中的游戏,那么你可能需要在 OpenGL ES 2.0 方面进行大量投资.如果你准备将你的图形管道代码库移动到 Direct3D 11 和 Windows ...
- tp5 修改自带success或error跳转模板页面
tp5 修改自带success或error跳转模板页面 我们在使用tp5或者tp3.2的时候,用的成功或者失败跳转提示页面一般是用框架的.在后续开发过程中,根据实际项目需要,也是可以更改的,在此分享一 ...
- 通用后台管理系统源码,响应式布局,Java管理系统源码,零门槛安装部署
本项目是一个通用响应式管理后台,导入开发环境安装就能直接运行,界面也非诚漂亮,在PC端和移动端也是自适应的.非常适合企业或者个人搭建各种商城后台,博客后台,网站管理后台等. 源码启动后的截图 需要这套 ...