CF433B
题目简化和分析:
为了更加快速的求出答案,好像没前缀和快速。
为了大家更好的理解线段树,我们使用了线段树。
如果您并不了解线段树,可以转战模板。
因为我们知道线段树可以快速求区间和,于是我们建两棵树。
一个是原来数组,一个是排好序的数组。
每次查询分别用不同的线段树区间和就行了。
Solution:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const int N=4e5+50;
const int M=1e5+50;
inline ll read(){
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9'){
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
ll n,m;
ll v[N];
ll ans1[N],ans2[N];
ll ls(ll x){return x<<1;}
ll rs(ll x){return x<<1|1;}
void push_up1(ll p){
ans1[p]=ans1[ls(p)]+ans1[rs(p)];
}
void push_up2(ll p){
ans2[p]=ans2[ls(p)]+ans2[rs(p)];
}
void build1(ll p,ll l,ll r){
if(l==r){ans1[p]=v[l];return;}
ll mid=(l+r)>>1;
build1(ls(p),l,mid);
build1(rs(p),mid+1,r);
push_up1(p);
}
void build2(ll p,ll l,ll r){
if(l==r){ans2[p]=v[l];return;}
ll mid=(l+r)>>1;
build2(ls(p),l,mid);
build2(rs(p),mid+1,r);
push_up2(p);
}
ll query1(ll nx,ll ny,ll l,ll r,ll p){
ll res=0;
if(nx<=l&&r<=ny) return ans1[p];
ll mid=(l+r)>>1;
if(nx<=mid) res+=query1(nx,ny,l,mid,ls(p));
if(ny>mid) res+=query1(nx,ny,mid+1,r,rs(p));
return res;
}
ll query2(ll nx,ll ny,ll l,ll r,ll p){
ll res=0;
if(nx<=l&&r<=ny) return ans2[p];
ll mid=(l+r)>>1;
if(nx<=mid) res+=query2(nx,ny,l,mid,ls(p));
if(ny>mid) res+=query2(nx,ny,mid+1,r,rs(p));
return res;
}
int main()
{
n=read();
for(int i=1;i<=n;++i) v[i]=read();
build1(1,1,n);
sort(v+1,v+n+1);
build2(1,1,n);
m=read();
for(int i=1;i<=m;++i){
ll op,l,r;
op=read();
if(op==1){
l=read(),r=read();
printf("%lld\n",query1(l,r,1,n,1));
}else{
l=read(),r=read();
printf("%lld\n",query2(l,r,1,n,1));
}
}
return 0;
}
CF433B的更多相关文章
- CF433B Kuriyama Mirai's Stones 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(m\) 次询问,询问有以下两种: \(1~l~r\),求 \(\sum\limits_{i=l ...
随机推荐
- vue3 安装 3d-force-graph
1.首先创建vue3的项目 2.创建好后通过开发工具打开项目并打开命令行,输入指令 npm install 3d-force-graph 安装即可 3.在使用的页面中引入 3d-force-graph ...
- 揭开 RocketMQ 事务消息的神秘面纱
事务消息是 RocketMQ 的高级特性之一,相信很多同学都对于其实现机制很好奇. 这篇文章,笔者会从应用场景.功能原理.实战例子.实现细节四个模块慢慢为你揭开事务消息的神秘面纱. 1 应用场景 以电 ...
- (占坑编辑中)hexo博客github page更换域名
hexo博客github page更换域名 檗科下的Cname文件一定要改为最近的域名
- 2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用?
2023-07-16:讲一讲Kafka与RocketMQ中零拷贝技术的运用? 答案2023-07-16: 什么是零拷贝? 零拷贝(英语: Zero-copy) 技术是指计算机执行操作时,CPU不需要先 ...
- Java List集合根据某字段去重
去重方法 单个字段为条件去重 /** * 单字段去重 * @param jackpotList1 新集合 * @param jackpotList 需要去重的集合 * @return */ priva ...
- 【技术积累】Vue中的核心概念【四】
Vue的生命周期 Vue中的生命周期是指组件从创建到销毁的整个过程中,会触发一系列的钩子函数 Vue2中的生命周期 Vue2中的生命周期钩子函数是在组件的不同阶段执行的特定函数.这些钩子函数允许开发者 ...
- Python数据可视化-折线图
Python数据可视化-折线图 一.JSON数据格式 1.1 什么是json JSON是一种轻量级的数据交互格式.可以按照JSON指定的格式去组织和封装数据 JSON本质上是一个带有特定格式的字符串 ...
- 这些年写过的花式sql - 第一句 删除重复无效的记录
这些年写过的花式sql - 第一句 删除重复无效的记录 写好复杂sql可以减少代码量,经过写这些年的后台统计,我学着像写代码一样的设计和尝试sql.现整理如下: 本来想一次性写完的,不过那写起来和看起 ...
- ABC274 题解
A 题目:给定 \(A,B\) 输出 \({B}\over{A}\) 保留 \(3\) 位小数. 简答题,和A+B problem 一样,除一除,保留一下小数. B 题目:给定一个 \(n\) 行 \ ...
- 论文解读(AAD)《Knowledge distillation for BERT unsupervised domain adaptation》
Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息 论文标题:Knowledge distillation for BERT unsupervised domain a ...