BZOJ3932(主席树上二分+差分
按时间作为主席树的版本,每个版本的主席树都是一个权值线段树。
差分消去时间影响
对于当前时间版本的主席树查询前K大即可。
树上二分时结束后切记判定l==r的状态(易错
l==r叶子节点可能存在多个值(值大小为sum/siz )
用I64dOLE了好久 。。 。。。。 。 。。 。 。 。 。 。 。 。 。。 。
用bit/stdc++.h CE.....
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ;
const int LOGN = ;
const int maxn = N*LOGN;
#define lson son[rt][0]
#define rson son[rt][1]
#define un(x) (x>0?x:-x)
struct node{
int pos,val;
};
node cf[N<<];
ll sum[maxn],siz[maxn];
int son[maxn][],root[N],id[N];
void pushup(int rt)
{
siz[rt] = siz[lson]+siz[rson];
sum[rt] = sum[lson]+sum[rson];
}
int tot = ;
void update(int x,int& y,int l,int r,int p)
{
y = ++tot;
if(l==r)
{
if(p>) siz[y] = siz[x]+;
else siz[y] = siz[x]-;
sum[y] = sum[x]+p;
return ;
}
son[y][] = son[x][];
son[y][] = son[x][];
int m = (r+l)>>;
if(un(p)<=m) update(son[x][],son[y][],l,m,p);
else update(son[x][],son[y][],m+,r,p);
pushup(y); }
ll bfind(int l,int r,int rt,int k)
{
//cout<<"size:: "<<siz[rt]<<sum[rt]<<endl;
if(siz[rt]<=k) return sum[rt];
ll ans = ;
while(l<r)
{
int m = (r+l)>>;
if(k<siz[lson])
{
r = m;
rt = lson;
}
else{
l = m+;
k -= siz[lson];
ans+=sum[lson];
rt = rson;
}
}
if(k&&siz[rt]>) ans+=sum[rt]/siz[rt]*min(k,siz[rt]);
return ans;
}
bool cmp(node a,node b)
{
return a.pos<b.pos;
}
int main()
{
int n,m;
scanf("%d%d",&m,&n);
int s,e,p;
int lim = ;
int cnt = ;
for(int i=;i<m;i++){
scanf("%d%d%d",&s,&e,&p);
cf[++cnt] = (node){s,p};
cf[++cnt] = (node){e+,-p};
lim = max(lim,p);
}
sort(cf+,cf+cnt+,cmp);
ll pre = ;
for(int i=;i<=cnt;i++)update(root[i-],root[i],,lim,cf[i].val);
for(int i=cnt;i>=;i--){
if(cf[i].pos!=cf[i+].pos) id[cf[i].pos] = i;
}
for(int i=;i<=n;i++){
if(id[i]==)id[i] = id[i-];
//cout<<id[i]<<endl;
}
int x,a,b,c,k;
for(int i=;i<n;i++)
{
scanf("%d%d%d%d",&x,&a,&b,&c);
k = (a*pre+b)%c+;
pre = bfind(,lim,root[id[x]],k);
//cout<<x<<" "<<id[x]<<" ";
printf("%lld\n",pre);
}
return ;
}
AC代码
BZOJ3932(主席树上二分+差分的更多相关文章
- 【主席树上二分】bzoj5361: [Lydsy1805月赛]对称数
随机化选讲例题 题目大意 小 Q 认为,偶数具有对称美,而奇数则没有.给定一棵 n 个点的树,任意两点之间有且仅有一条直接或间接路径.这些点编号依次为 1 到 n,其中编号为 i 的点上有一个正整数 ...
- BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)
BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...
- LOJ 2551 「JSOI2018」列队——主席树+二分
题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用 ...
- uoj#402. 【CTSC2018】混合果汁(主席树+二分)
传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...
- 计蒜客 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 ...
- [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...
- bzoj 2653: middle (主席树+二分)
2653: middle Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2522 Solved: 1434[Submit][Status][Disc ...
- LOJ 3059 「HNOI2019」序列——贪心与前后缀的思路+线段树上二分
题目:https://loj.ac/problem/3059 一段 A 选一个 B 的话, B 是这段 A 的平均值.因为 \( \sum (A_i-B)^2 = \sum A_i^2 - 2*B \ ...
- P3066 [USACO12DEC]逃跑的BarnRunning Away From (树上二分)
题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 树上二分.这个做法还是基于树上差分的,也就是对于每一个点uu,我们要找到它向上跳LL的长度最高能够跳到的祖先.(当 ...
随机推荐
- Ryzen 移动平台上安装 Gentoo Linux
Linux 内核对于跟进支持 Ryzen 移动低压 CPU 的热情似乎和市面上寥寥无几的 Ryzen 笔记本热度十分吻合.虽然从 Linux 4.11 起就对 Ryzen 桌面 CPU 有较好的支持, ...
- 快速搭建angular7 前端开发环境
第一步:全局安装 Angular CLI (1)打开npm(终端)安装angular-cli 第二步:创造工作区和初始应用 (1)运行命令 ng new my-app 第三步:启动开发服务器 (1)c ...
- iOS拼图
#import "ViewController.h" @interface ViewController () @end @implementation ViewContro ...
- Jmeter 线程组、运行次数参数化(转)Jpara1=4 -Jpara2=5
Jmeter的jmx文件保存了线程数和运行次数等参数,这个参数可以在命令行中传入参数的方式来修改数值 步骤如下 1.生成线程和运行次数的参数 Jmeter选项中函数助手对话框,选中__P参数,这个参数 ...
- avro-maven-plugin
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...
- BeanFilterUtil
package com.yundaex.utility.bean.filter; import java.util.ArrayList; import java.util.List; import o ...
- postgis 赋予postgresql空间数据库的能力
安装: Windows:postgresql的bin目录下:运行stackbuilder,一步一步按照提示来就行了 Ubuntu: apt-get install postgresql-9.3-pos ...
- JAVA多线程面试题目
1,java中有几种方法可以实现一个线程? 答:在Java中实现一个线程有两种方法,第一是实现Runnable接口实现它的run()方法,第二种是继承Thread类,覆盖它的run()方法.这两种方法 ...
- Echarts同一页面多个图表自适应浏览器窗口大小——window.onresize
当前做的一个项目中,频繁使用到百度团队的Echarts,发在一个页面同时出现多个图表时,只有最后一个图表触发了window.onresize事件,查询官方文档后得到解决. 方法如下: hwChart. ...
- Python踩坑之旅其一杀不死的Shell子进程
目录 1.1 踩坑案例 1.2 填坑解法 1.3 坑位分析 1.4 坑后扩展 1.4.1 扩展知识 1.4.1 技术关键字 1.5 填坑总结 1.1 踩坑案例 踩坑的程序是个常驻的Agent类管理进程 ...