hdu6464 线段树
http://acm.hdu.edu.cn/showproblem.php?pid=6464
题意
一个空序列,q次操作,一种是往序列后插入x个y,另一种是查询序列中第x小到第y小的数字之和
题解
- 线段树维护区间和,区间个数
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=1e5+5;
const int P=1e9+7;
ll V[MAXN<<2],W[MAXN<<2],b[MAXN],lt[MAXN],x[MAXN],y[MAXN];
int sz=0,Q[MAXN];
int tot=0;
void push_up(int o){
V[o]=V[o<<1]+V[o<<1|1];V[o]%=P;
W[o]=W[o<<1]+W[o<<1|1];
}
void ud(int o,int l,int r,int p,ll v){
if(l==r){W[o]+=v;V[o]+=b[l]%P*v%P;V[o]%=P;return;}
int mid=(l+r)/2;
if(p<=mid)ud(o<<1,l,mid,p,v);
else ud(o<<1|1,mid+1,r,p,v);
push_up(o);
}
int search(int o,int l,int r,ll k){
if(l==r){lt[++tot]=k;return l;}
int mid=(l+r)/2;
if(k<=W[o<<1])return search(o<<1,l,mid,k);
else return search(o<<1|1,mid+1,r,k-W[o<<1]);
}
ll qy(int o,int l,int r,int L,int R){
if(L>R)return 0;
if(L<=l&&r<=R)return V[o];
int mid=(l+r)/2;
ll ans=0;
if(L<=mid){ans+=qy(o<<1,l,mid,L,R);ans%=P;}
if(R>mid){ans+=qy(o<<1|1,mid+1,r,L,R);ans%=P;}
return ans;
}
ll qW(int o,int l,int r,int p){
if(l==r)return W[o];
int mid=(l+r)/2;
if(p<=mid)return qW(o<<1,l,mid,p);
else return qW(o<<1|1,mid+1,r,p);
}
int q;
int id(ll x){
return lower_bound(b+1,b+sz+1,x)-b;
}
int main(){
cin>>q;
for(int i=0;i<q;i++){
scanf("%d%lld%lld",&Q[i],&x[i],&y[i]);
if(Q[i]==1)b[++sz]=y[i];
}
sort(b+1,b+sz+1);sz=unique(b+1,b+sz+1)-(b+1);
//for(int i=1;i<=sz;i++)cout<<b[i]<<" ";
//cout<<endl;
for(int i=0;i<q;i++){
if(Q[i]==1){
ud(1,1,sz,id(y[i]),x[i]);
}else{
tot=0;
int A=search(1,1,sz,x[i]);
int B=search(1,1,sz,y[i]);
//cout<<A<<" "<<B<<endl;
ll ans=0;
if(A==B){ans=(lt[2]-lt[1]+1)*b[A]%P;}
else{
ans=qy(1,1,sz,A+1,B-1);
ans+=(qW(1,1,sz,A)-lt[1]+1)*b[A]%P;ans%=P;
ans+=lt[2]*b[B]%P;ans%=P;
}
printf("%lld\n",ans);
}
}
}
hdu6464 线段树的更多相关文章
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- C lang:character input and output (I/O)
Xx_Introduction Character input and output is by more line character conpose of the text flow Defin ...
- QGIS 3.4 3.6 另存栅格图层到GeoPackage出现覆盖问题 解决方案
转载请声明:博客园 @秋意正寒 升级你的QGIS到3.8或以上 这在3.4.x和3.6.x都存在同样的问题.在老版本QGIS重,如果新建一个GeoPackage,先存入栅格数据就没有这个问题,但是如果 ...
- ksoap2 android 调用WebService
webService,soap,wsdl的基本概念? 详情请看维基百科 基于soap 1.1, soap 1.2 的请求和响应数据源 查找了很久都是基于json格式传输数据,但是最终还是找到了基于xm ...
- 使用可移动表空间(TTS)的最佳做法 (Doc ID 1457876.1)
Best Practices for Using Transportable Tablespaces (TTS) (Doc ID 1457876.1) APPLIES TO: Oracle Datab ...
- Ubuntu16.04 GTX750安装CUDA9.0,Pytorch,Anaconda教程
Ubuntu16 GTX750安装CUDA9.0,Pytorch,Anaconda教程 安装前警告 不要使用Ubuntu18! 不要使用Ubuntu18! 不要使用Ubuntu18! 务必重装成Ubu ...
- JS获取url请求参数
JS获取url请求参数,代码如下: // 获取url请求参数 function getQueryParams() { var query = location.search.substring(1) ...
- HDU - 5952 Counting Cliques
Counting Cliques HDU - 5952 OJ-ID: hdu-5952 author:Caution_X date of submission:20191110 tags:dfs,gr ...
- 呵呵,asp.net 屁东西我都会忘记
ASP.NET中的好些基本的东西有的忘了,有的需要学,从现在开始,给自己开一个基本的常用知识点的总结,一是学习,二是备忘. 今天算是第一篇吧! DropDownList在从数据库中得到数据源绑定后,计 ...
- MySQL入门——Linux下安装后的配置文件
MySQL入门——Linux下安装后的配置文件 摘要:本文主要了解了在Linux环境下安装MySQL后的配置文件的位置,以及如何创建配置文件. 查看配置文件的加载顺序 找到mysqld的路径 通过wh ...
- Use a Multiline Editor for String Properties 对字符串属性使用多行编辑器
In this lesson, you will learn how to display a multiline editor for string properties. For this pur ...