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 线段树的更多相关文章

  1. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  2. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  3. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  4. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

  5. codevs 1082 线段树区间求和

    codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...

  6. PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树

    #44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...

  7. CF719E(线段树+矩阵快速幂)

    题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集

    3673: 可持久化并查集 by zky Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 1878  Solved: 846[Submit][Status ...

随机推荐

  1. 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 ...

  2. QGIS 3.4 3.6 另存栅格图层到GeoPackage出现覆盖问题 解决方案

    转载请声明:博客园 @秋意正寒 升级你的QGIS到3.8或以上 这在3.4.x和3.6.x都存在同样的问题.在老版本QGIS重,如果新建一个GeoPackage,先存入栅格数据就没有这个问题,但是如果 ...

  3. ksoap2 android 调用WebService

    webService,soap,wsdl的基本概念? 详情请看维基百科 基于soap 1.1, soap 1.2 的请求和响应数据源 查找了很久都是基于json格式传输数据,但是最终还是找到了基于xm ...

  4. 使用可移动表空间(TTS)的最佳做法 (Doc ID 1457876.1)

    Best Practices for Using Transportable Tablespaces (TTS) (Doc ID 1457876.1) APPLIES TO: Oracle Datab ...

  5. Ubuntu16.04 GTX750安装CUDA9.0,Pytorch,Anaconda教程

    Ubuntu16 GTX750安装CUDA9.0,Pytorch,Anaconda教程 安装前警告 不要使用Ubuntu18! 不要使用Ubuntu18! 不要使用Ubuntu18! 务必重装成Ubu ...

  6. JS获取url请求参数

    JS获取url请求参数,代码如下: // 获取url请求参数 function getQueryParams() { var query = location.search.substring(1) ...

  7. HDU - 5952 Counting Cliques

    Counting Cliques HDU - 5952 OJ-ID: hdu-5952 author:Caution_X date of submission:20191110 tags:dfs,gr ...

  8. 呵呵,asp.net 屁东西我都会忘记

    ASP.NET中的好些基本的东西有的忘了,有的需要学,从现在开始,给自己开一个基本的常用知识点的总结,一是学习,二是备忘. 今天算是第一篇吧! DropDownList在从数据库中得到数据源绑定后,计 ...

  9. MySQL入门——Linux下安装后的配置文件

    MySQL入门——Linux下安装后的配置文件 摘要:本文主要了解了在Linux环境下安装MySQL后的配置文件的位置,以及如何创建配置文件. 查看配置文件的加载顺序 找到mysqld的路径 通过wh ...

  10. 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 ...