按时间作为主席树的版本,每个版本的主席树都是一个权值线段树。

差分消去时间影响

对于当前时间版本的主席树查询前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(主席树上二分+差分的更多相关文章

  1. 【主席树上二分】bzoj5361: [Lydsy1805月赛]对称数

    随机化选讲例题 题目大意 小 Q 认为,偶数具有对称美,而奇数则没有.给定一棵 n 个点的树,任意两点之间有且仅有一条直接或间接路径.这些点编号依次为 1 到 n,其中编号为 i 的点上有一个正整数 ...

  2. BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案)

    BZOJ 1926: [Sdoi2010]粟粟的书架(主席树,二分答案) 题意 : 给你一个长为\(R\)宽为\(C\)的矩阵,第\(i\)行\(j\)列的数为\(P_{i,j}\). 有\(m\)次 ...

  3. LOJ 2551 「JSOI2018」列队——主席树+二分

    题目:https://loj.ac/problem/2551 答案是排序后依次走到 K ~ K+r-l . 想维护一个区间排序后的结果,使得可以在上面二分.求和:二分可以知道贡献是正还是负. 于是想用 ...

  4. uoj#402. 【CTSC2018】混合果汁(主席树+二分)

    传送门 我们先把果汁按照美味度排序,枚举\(d\),那么肯定是贪心的选择美味程度不小于\(d\)的且最便宜的果汁 发现\(d\)可以二分,那么在主席树上二分就可以了 据说还有整体二分的大佬然而我并不会 ...

  5. 计蒜客 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 ...

  6. [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)

    题面 分析 对于一个区间修改(s,e,v),我们可以将它差分,这样就变成了单点修改s和e+1(s插入,t+1删除) 我们用主席树维护差分数组的前缀和,第i棵主席树维护区间[1,i]之间的所有差分值 那 ...

  7. bzoj 2653: middle (主席树+二分)

    2653: middle Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 2522  Solved: 1434[Submit][Status][Disc ...

  8. LOJ 3059 「HNOI2019」序列——贪心与前后缀的思路+线段树上二分

    题目:https://loj.ac/problem/3059 一段 A 选一个 B 的话, B 是这段 A 的平均值.因为 \( \sum (A_i-B)^2 = \sum A_i^2 - 2*B \ ...

  9. P3066 [USACO12DEC]逃跑的BarnRunning Away From (树上二分)

    题意 给出以1号点为根的一棵有根树,问每个点的子树中与它距离小于等于l的点有多少个. 树上二分.这个做法还是基于树上差分的,也就是对于每一个点uu,我们要找到它向上跳LL的长度最高能够跳到的祖先.(当 ...

随机推荐

  1. BZOJ 1012【线段树】

    题意: Q L 询问数列最后 L 个数中最大的数. A n 将 n + t ( t_init = 0 ), 然后插到最后去. 思路: 感觉动态地插入,很有问题. 数组地长度会时常变化,但是可以先预处理 ...

  2. centos lamp 配置

    # 1. 查看是否有httpd进程正在运行(下图是有的情况) ps -ef|grep httpd

  3. 图解linux安装hadoop

    安装步骤: 一.准备工作 1.解压文件 [root@localhost soft]# tar -zxvf hadoop-2.4.1.tar.gz 2.改名: [root@localhost soft] ...

  4. 洛谷P1054 等价表达式

    P1054 等价表达式 题目描述 明明进了中学之后,学到了代数表达式.有一天,他碰到一个很麻烦的选择题.这个题目的题干中首先给出了一个代数表达式,然后列出了若干选项,每个选项也是一个代数表达式,题目的 ...

  5. CF622F The Sum of the k-th Powers(拉格朗日插值)

    题意 给出 \(n,k\) , \(n\le10^9,k\le10^6\) ,求 \(\sum_{i=1}^n i^k(mod\;10^9+7)\) 题解 自然数幂次和,是一个\(k+1\)次多项式, ...

  6. [Xcode 实际操作]四、常用控件-(17)为MKMapView地图上显示提示框

    目录:[Swift]Xcode实际操作 本文将演示当点击地图上的标注圆点时,弹出信息窗口. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...

  7. [Leetcode]008.String to Integer (atoi)

    public class Solution { public int myAtoi(String str) { int index = 0, sign = 1, total = 0; //1. 边界条 ...

  8. Uva1608

    如果一个序列的所有子序列中均存在至少一个元素,这个元素在该子序列中只出现一次,则这个序列non-boring. 当一个序列[x,y]中没有元素只出现一次,那么该序列不符合要求,如果有的话,设为第i个元 ...

  9. LeetCode 225 Implement Stack using Queues 用队列实现栈

    1.两个队列实现,始终保持一个队列为空即可 class MyStack { public: /** Initialize your data structure here. */ MyStack() ...

  10. rabbit的简单搭建,java使用rabbitmq queue的简单例子和一些坑

    一 整合 由于本人的码云太多太乱了,于是决定一个一个的整合到一个springboot项目里面. 附上自己的项目地址https://github.com/247292980/spring-boot 以整 ...