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. React 基础笔记

    概览 React 是一个声明式,高效且灵活的用于构建用户界面的 JavaScript库.可以将一些简短.独立的代码片段组合成复杂的UI界面,这些片段被称为"组件". React 大 ...

  2. 团队项目之Scrum4

    小组:BLACK PANDA 时间:2019.11.24 每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 基本实现web富文本编辑功能 后台的编辑接口已经基本完成,还有一些b ...

  3. 使用Eclipse开发Web项目(JSP)——简单登录、无sql

    1.使用Eclipse开发Web项目(JSP) tomcat 2.在Eclipse中创建的Web项目: 浏览器可以直接访问webContent中的文件 例如http://localhost:8080/ ...

  4. [译]Vulkan教程(15)图形管道基础之RenderPass

    [译]Vulkan教程(15)图形管道基础之RenderPass Render passes Setup 设置 Before we can finish creating the pipeline, ...

  5. php isset()和 in_array()

    结果: 结论: isset()完胜

  6. Java入门总结

    1. 一个Java源码只能定义一个public类型的class,并且class名称和文件名要完全一致: 使用javac可以将.java源码编译成.class字节码: 使用java可以运行一个已编译的J ...

  7. 浅谈Httpmodules

    HttpModule是ASP.NET过滤器,可以理解为HTTP请求的必经之地我们只要实现IHttpModule接口,就可以取代HttpModule namespace BookShop.Handler ...

  8. 保护模式中的PDE与PTE

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 保护模式中的PDE与PTE 1. PDE与PTE的认知 我们在上一 ...

  9. InnoSetup 根据选择的安装语言显示不同语言的(协议)License和更新说明

    需求 在安装时,选择中文安装,显示中文版协议(License)文件. 在安装时,选择英文安装,显示英文版协议(License)文件. 解决 [Languages] 段中有LicenseFile属性和I ...

  10. 随机的标识符GUID

    Guid guid = Guid.NewGuid();Console.WriteLine(guid.ToString());