题目大意:

共Q次操作 操作有两种

操作一 在序列尾部加入f[i]个s[i]

操作二 查询序列第f[i]小到第s[i]小之间的总和

离线操作 把序列内的值离散化

然后利用离散化后的值 在线段树上对应权值操作

权值线段树维护权值对应的值的个数和总和

查询 用s[i]的前缀和减去f[i]-1的前缀和 具体看注释

#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define INF 0x3f3f3f3f
#define mem(i,j) memset(i,j,sizeof(i))
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,r,l) for(int i=r;i>=l;i--)
#define gcd(i,j) __gcd(i,j);
const int N=1e5+;
const int mod=; LL p[N], f[N], s[N];
LL cop[N], tot; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
LL num[N<<], sum[N<<];
void pushUp(int rt) {
num[rt]=num[rt<<]+num[rt<<|];
sum[rt]=(sum[rt<<]+sum[rt<<|])%mod;
}
void update(LL ind,LL k,int l,int r,int rt) {
if(l==r) {
num[rt]+=k; // 这个值在序列内的个数
sum[rt]=(sum[rt]+cop[ind]*k)%mod; // 总和
return ;
}
int m=(l+r)>>;
if(m>=ind) update(ind,k,lson);
else update(ind,k,rson);
pushUp(rt);
}
LL query(LL k,int l,int r,int rt) {
if(k==) return ;
if(l==r) return k*cop[l]%mod;
// 在l位置 还差k个 k可能不需要num[l]那么多
// 所以应该是k*cop[l] 而不是sum[l]
int m=(l+r)>>, L=rt<<;
if(num[L]<=k) return (sum[L]+query(k-num[L],rson))%mod;
// 左儿子区间不足k个 那么左儿子区间的总和+右儿子区间差的个数的总和
else return query(k,lson);
// 左儿子区间的数已超过k个 就在左儿子区间内继续缩小
} int main()
{
mem(num,0LL); mem(sum,0LL);
int q; scanf("%d",&q);
inc(i,,q) scanf("%lld%lld%lld",&p[i],&f[i],&s[i]);
tot=;
inc(i,,q) if(p[i]==)
cop[++tot]=s[i];
sort(cop+,cop++tot);
tot=unique(cop+,cop++tot)-cop-;
inc(i,,q) {
if(p[i]==) {
int ind=lower_bound(cop+,cop++tot,s[i])-cop;
update(ind,f[i],,tot,); // 离散化后的值在对应权值位置操作
}
else {
LL R=query(s[i],,tot,);
LL L=query(f[i]-,,tot,);
printf("%lld\n",(R-L+mod)%mod);
}
} return ;
}

HDU 6464 /// 权值线段树的更多相关文章

  1. HDU 6464 权值线段树 && HDU 6468 思维题

    免费送气球 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others)    M ...

  3. 2019年CCPC网络赛 HDU 6703 array【权值线段树】

    题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...

  4. R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数

    R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...

  5. HDU - 2665 Kth number 主席树/可持久化权值线段树

    题意 给一个数列,一些询问,问$[l,r]$中第$K$大的元素是哪一个 题解: 写法很多,主席树是最常用的一种之一 除此之外有:划分树,莫队分块,平衡树等 主席树的定义其实挺模糊, 一般认为就是可持久 ...

  6. HDU - 5592 ZYB's Premutation (权值线段树)

    题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...

  7. hdu 5592 ZYB's Premutation (权值线段树)

    最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others)    Mem ...

  8. 区间第k大问题 权值线段树 hdu 5249

    先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...

  9. HDU 5249:KPI(权值线段树)

    KPI Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...

随机推荐

  1. What are draw calls(绘制命令) and what are batches(批)

    Resolution It is important to know what are draw calls and what are batches. A draw call is a call t ...

  2. 转载他人的efk搭建文章后边有链接和地址

    EFK教程 - EFK快速入门指南   通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 目录 ▪ 用途▪ 实验架构▪ E ...

  3. vue,一路走来(15)--简单投票系统

    今天记录一下简单的投票系统,主要实现选中至少五张作品,并提交投票. 思路:选中作品,将作品id存入到数组里. 取消投票,则从数组中移除该作品id. 如图效果: <li v-for="( ...

  4. Java与C++对比

    Java的优势 Java是纯面向对象的,能够反映一切生活中的对象,编写程序更为容易. 平台无关性,“一次编译,到处运行”.(面试:为什么? 因为Java对每种数据类型分配的长度是固定的,但C++不是) ...

  5. springboot中使用RabbitMq

    转载:http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html RabbitMQ 即一个消息队列,主要是用来实现 ...

  6. MySQL MHA之 master_ip_failover.sh脚本

    master_ip_failover.sh脚本是用perl编写的,可以在mha-manager源码包中可以找到,下面给出的结合keepalived进行自动切换的脚本: [root@mha script ...

  7. vue项目放在IE上页面空白的问题

    Babel是一个广泛使用的转码器,可以将ES6代码转为ES5代码 1.npm install babel-polyfill --save 2.main.js中引入 import 'babel-poly ...

  8. js this 指向

    JavaScript 作为一种脚本语言身份的存在,因此被很多人认为是简单易学的.然而情况恰恰相反,JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.由于其运行期绑定的特性,Java ...

  9. IO操作之ObjectInputStream与ObjectOutputStream

    之前写过DataInputStream和DataOutputStream,使用这两个类可以对java基本数据类型进行序列化和反序列化. 本篇再来两个新东西:ObjectInputStream,Obje ...

  10. 4412 Linux设备总线

    总线_设备_驱动注册流程详解 注册流程图 • 设备一般都需要先注册,才能注册驱动– 现在越来越多的热拔插设备,反过来了.先注册驱动,设备来了再注册 设备 • 本节使用的命令– 查看总线的命令#ls / ...