http://acm.hdu.edu.cn/showproblem.php?pid=6464

不理解先看博客:https://blog.csdn.net/g21glf/article/details/82986968

已知一开始有一个空序列,接下来有Q次操作,每次操作给出type、first和second三个值。当type为1时,意味着该操作属于第一种操作:往序列尾部添加first个second数。当type为2时,意味着该操作属于第二种操作:查询序列中第first小至第second小的数值之和(一共有(second - first + 1)个数被累加),并将结果对1000000007取模后输出。

#include<bits/stdc++.h>
using namespace std ;
#define ll long long
const ll inf=1e16;
const ll mod=1e9+;
const int maxn=1e5+; ll sum[maxn*],val[maxn*];
int ls[maxn*],rs[maxn*];
int cnt;
void update(int &o , int l , int r , ll k , ll num)///建树的过程
{
if(!o)
o=++cnt;
sum[o]+=k;
val[o]+=1LL*k*num;///作为记录全部小于k 的数的和
val[o]%=mod;
if(l==r) return ; //到底就返回
int mid=(l+r)/;
if(num<=mid)///在左子树
update(ls[o] , l , mid , k , num);
else
update(rs[o] , mid+ , r , k , num);
} ll query(int o , int l , int r , ll k)
{
if(l==r) return 1LL*k*l%mod;///这里与单纯找第k小不一样o(原理差不多 , 搜索到l 后 乘数量k)
int mid=(l+r)/;
ll ans=;
if(k > sum[ls[o]]) /// 想找的数在右子树,前面有v个小于k的数 , 则找右子树第k-v小的数
{
ans=(val[ls[o]] + query(rs[o] , mid+ , r , k-sum[ls[o]]))%mod;
}
else
ans=query(ls[o],l,mid,k);
return ans%mod;
}
int main()
{
int Q,rt=;
scanf("%d",&Q);
while(Q--)
{
int op;
ll l , r;
scanf("%d%lld%lld",&op,&l,&r);
if(op==) update(rt , ,1e9 , l , r);
else
{
///查找小于r的全部数和于 查找小于l-1的全部数和
ll ans=(query(rt , , 1e9 , r) - query(rt,,1e9 , l-) + mod)%mod;
printf("%lld\n",ans);
}
}
}

HDU6464 (权值线段树)-(查找区间第k1小于第k2小之间的和)的更多相关文章

  1. 【bzoj3110】[Zjoi2013]K大数查询 权值线段树套区间线段树

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

  2. BZOJ 3110 ZJOI 2013 K大数查询 树套树(权值线段树套区间线段树)

    题目大意:有一些位置.这些位置上能够放若干个数字. 如今有两种操作. 1.在区间l到r上加入一个数字x 2.求出l到r上的第k大的数字是什么 思路:这样的题一看就是树套树,关键是怎么套,怎么写.(话说 ...

  3. 洛谷P3332 [ZJOI2013]K大数查询 权值线段树套区间线段树_标记永久化

    Code: #include <cstdio> #include <algorithm> #include <string> #include <cstrin ...

  4. 【BZOJ-2892&1171】强袭作战&大sz的游戏 权值线段树+单调队列+标记永久化+DP

    2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 45  Solved: 30[Submit][Status][Discuss] D ...

  5. B20J_2733_[HNOI2012]永无乡_权值线段树合并

    B20J_2733_[HNOI2012]永无乡_权值线段树合并 Description:n座岛,编号从1到n,每座岛都有自己的独一无二的重要度,按照重要度可以将这n座岛排名,名次用1到 n来表示.某些 ...

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

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

  7. 动态求区间K大值(权值线段树)

    我们知道我们可以通过主席树来维护静态区间第K大值.我们又知道主席树满足可加性,所以我们可以用树状数组来维护主席树,树状数组的每一个节点都可以开一颗主席树,然后一起做. 我们注意到树状数组的每一棵树都和 ...

  8. 【bzoj3065】带插入区间K小值 替罪羊树套权值线段树

    题目描述 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理性愉悦一下,查询区间k小值.他每次向它的随从伏特提出 ...

  9. 【BZOJ3065】带插入区间K小值 替罪羊树+权值线段树

    [BZOJ3065]带插入区间K小值 Description 从前有n只跳蚤排成一行做早操,每只跳蚤都有自己的一个弹跳力a[i].跳蚤国王看着这些跳蚤国欣欣向荣的情景,感到非常高兴.这时跳蚤国王决定理 ...

随机推荐

  1. SpringBoot26 RestTemplate、WebClient

    1 RestTemplate RestTemplate是在客户端访问 Restful 服务的一个核心类:RestTemplate通过提供回调方法和允许配置信息转换器来实现个性化定制RestTempla ...

  2. Apache ab命令

    一.简介 ab是apache自带的压力测试工具.ab非常实用,它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试.比如nginx.tomcat.IIS等. 二. ...

  3. win32多线程 (六)信号量 Synchronization

    比如:多个人来取仓库物品,我们为了做到多线程的互斥,一种方法是,对每个货品加个mutex互斥锁.另种方法,对窗口(只一个)加个mutex锁,但这样的话效率都比较低.而另钟解决办法是用信号量.信号量其实 ...

  4. mac安装nose,command not found:nosetests

    mac通过pip install nose失败,看了一下是权限的问题,重新用sudo pip install nose安装,安装成功. 但是执行nosetests时,提示command not fou ...

  5. Python基础入门-While循环

    讲完了for循环我们继续来看第二个循环,那就是while循环,while循环和for循环虽然都是循环,但是有着本质的不同.我们先来看下她们之间的区别和联系: While循环和for循环区别: 1.fo ...

  6. MySQL事务隔离级别测试实例

    https://www.cnblogs.com/huanongying/p/7021555.html MySQL事务隔离级别 事务隔离级别 脏读 不可重复读 幻读 读未提交(read-uncommit ...

  7. jquery延时刷新

    setTimeout(function(){ location.replace(location.href); },1000);

  8. springcloud 实现微服务间调用

    package com.idoipo.ibt.config; import org.apache.http.HttpException; import org.apache.http.HttpRequ ...

  9. Graphic 完成文字缩放

    思路:将文字生成图片,再加载此图片伸缩至需要大小. 首先要获取文字的实际大小.宽度高度,再通过图片缩放就OK了 public static void DrawText() { Font f = , F ...

  10. php CI框架 使用PDO 的连接配置

    $db['default'] = array( 'dsn' => 'mysql:dbname=hejun;host=192.168.137.127', //'hostname' => '' ...