HDU 6464 /// 权值线段树
题目大意:
共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 /// 权值线段树的更多相关文章
- HDU 6464 权值线段树 && HDU 6468 思维题
免费送气球 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- HDU 6464 免费送气球 【权值线段树】(广东工业大学第十四届程序设计竞赛)
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6464 免费送气球 Time Limit: 2000/1000 MS (Java/Others) M ...
- 2019年CCPC网络赛 HDU 6703 array【权值线段树】
题目大意:给出一个n个元素的数组A,A中所有元素都是不重复的[1,n].有两种操作:1.将pos位置的元素+1e72.查询不属于[1,r]中的最小的>=k的值.强制在线. 题解因为数组中的值唯一 ...
- R - Weak Pair HDU - 5877 离散化+权值线段树+dfs序 区间种类数
R - Weak Pair HDU - 5877 离散化+权值线段树 这个题目的初步想法,首先用dfs序建一颗树,然后判断对于每一个节点进行遍历,判断他的子节点和他相乘是不是小于等于k, 这么暴力的算 ...
- HDU - 2665 Kth number 主席树/可持久化权值线段树
题意 给一个数列,一些询问,问$[l,r]$中第$K$大的元素是哪一个 题解: 写法很多,主席树是最常用的一种之一 除此之外有:划分树,莫队分块,平衡树等 主席树的定义其实挺模糊, 一般认为就是可持久 ...
- HDU - 5592 ZYB's Premutation (权值线段树)
题意:给出序列前k项中的逆序对数,构造出这个序列. 分析:使用权值线段树来确定序列元素. 逆序对的数量肯定是递增的,从最后一个元素开始逆向统计,则\(a[i] - a[i-1]\)即位置i之前比位置i ...
- hdu 5592 ZYB's Premutation (权值线段树)
最近在线段树的世界里遨游,什么都能用线段树做,这不又一道权值线段树了么. ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Mem ...
- 区间第k大问题 权值线段树 hdu 5249
先说下权值线段树的概念吧 权值平均树 就是指区间维护值为这个区间内点出现次数和的线段树 用这个加权线段树 解决第k大问题就很方便了 int query(int l,int r,int rt,int k ...
- HDU 5249:KPI(权值线段树)
KPI Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Desc ...
随机推荐
- 使用EntityFramework调用存储过程并获取存储过程返回的结果集
[实习]刚入职,公司要求完成两个任务,任务要求使用存储过程和事务,其中一个问题要获取存储过程的查询结果集.经过多方查找和自己的实践,终于找到了方法.这里记录一下. 看到的这篇文章中给出的例子是查询单个 ...
- 使用纯php构建一个简单的PHP服务器
使用原生PHP构建一个简单的PHPWeb服务器 1.目录机构 webserver --src -- Response.php -- Server.php -- Request.php -- vendo ...
- Linux就该这么学05学习笔记
参考链接:https://www.linuxprobe.com/chapter-05.html 1.用户身份和能力 用户 管理员UID为0:系统的管理员用户. 系统用户UID为1-999: Lin ...
- git 报错
-bash: git: command not found export PATH=$PATH:/usr/local/git/bin 使用git clone出现 fatal: unable to ac ...
- Codeforces Round #394 (Div. 2) - A
题目链接:http://codeforces.com/contest/761/problem/A 题意:给定a个偶数,b个奇数,问是否能构成奇偶相间的阶梯.思路:a和b相差小于等于1即可构造出来.特判 ...
- C# List和DataTable的相互转换
1.List转DataTable /// <summary> /// list to datatable /// </summary> /// <typeparam na ...
- 查看linux服务器的版本信息
查看linux系统信息 uname -a Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UT ...
- 公私钥,数字证书,https
1.密钥对,在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的. 2.公钥,公钥用来给数据加密,用公钥加密的数据只能使用私钥解密. 3.私 ...
- python基础:7.求结果
求结果: v1 = 1 or 3 v2 = 1 and 3 v3 = 0 and 2 and 1 v4 = 0 and 2 or 1 v5 = 0 and 2 or 1 or 4 v6 = 0 o ...
- 2.xml约束技术----------dtd约束
1.xml的约束 (1)为什么需要定义约束了 比如现在定义一个person的xml文件,只想要这个文件里面保存人的信息,比如name age等,但是如果在xml文件中写了一个元素<猫>,发 ...