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的长度最高能够跳到的祖先.(当 ...
随机推荐
- 飘逸的python - 装饰器的本质
很多人把装饰器搞的很复杂,其实本质很简单. 首先,什么是装饰器呢?在代码中发现戴着@xxx帽子的,就是装饰器. 那要怎么自己定义一个装饰器呢? 其实任何一个接收一个参数的callable都可以用来做装 ...
- Ajax原生请求及Json基础
1.基本结构 <script type="text/javascript"> // 创建XMLHttpRequest对象 var request = new XMLHt ...
- VS2012打包部署教程
前言 通常我们只是写一些系统,然后想要运行功能的时候就打开代码点击启动,这样只适用于开发人员或者局部开发人员这样做,软件开发的大多数意义上就是拿出开发的软件让用户放心的去点.用户无需知道代码,无需知道 ...
- 【转】如何解决C盘根目录无法创建或写入文件
源地址:http://blog.csdn.net/xinke453/article/details/7496545
- hdu 1847 Good Luck in CET-4 Everybody!(巴什博弈)
Good Luck in CET-4 Everybody! HDU - 1847 大学英语四级考试就要来临了,你是不是在紧张的复习?也许紧张得连短学期的ACM都没工夫练习了,反正我知道的Kiki和Ci ...
- java线程池之一:创建线程池的方法
在Java开发过程中经常需要用到线程,为了减少资源的开销,提高系统性能,Java提供了线程池,即事先创建好线程,如果需要使用从池中取即可,Java中创建线程池有以下的方式, 1.使用ThreadPoo ...
- 2017ACM/ICPC广西邀请赛
A.A Math Problem #include <bits/stdc++.h> using namespace std; typedef long long ll; inline ll ...
- Codeforces Round #565 (Div. 3) A. Divide it!
链接: https://codeforces.com/contest/1176/problem/A 题意: You are given an integer n. You can perform an ...
- div可编辑 可拖动
版权声明:本文为博主原创文章,未经博主允许不得转载. 1.可编辑: <div id="move" contentEditable="true">可编 ...
- 【ACM】喷水装置
喷水装置(一) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 现有一块草坪,长为20米,宽为2米,要在横中心线上放置半径为Ri的喷水装置,每个喷水装置的效果都会让以 ...