题目简化和分析:

为了更加快速的求出答案,好像没前缀和快速。

为了大家更好的理解线段树,我们使用了线段树。

如果您并不了解线段树,可以转战模板。

因为我们知道线段树可以快速求区间和,于是我们建两棵树。

一个是原来数组,一个是排好序的数组。

每次查询分别用不同的线段树区间和就行了。

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

  1. CF433B Kuriyama Mirai's Stones 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(m\) 次询问,询问有以下两种: \(1~l~r\),求 \(\sum\limits_{i=l ...

随机推荐

  1. Dlang 与 C 语言交互(二)

    Dlang 与 C 语言交互(二) 随着需求不断增加,发现好像需要更多的东西了.在官网上找不到资料,四处拼凑才有了本文的分享. 上一文(DLang 与 C 语言交互(一) - jeefy - 博客园) ...

  2. kafka学习笔记02

    kafka拥有与其他几个消息队列同样的本事:   ①缓冲/削峰:控制和优化数据经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况.   应用场景:双十一秒杀活动,将用户消息写入消息队列中,我 ...

  3. Python随机数据生成——Faker的使用

    安装Faker pip install faker 导入模块及基本配置 # 导入Faker from faker import Faker # 初始化,设置locale为中文:默认是英文 fake = ...

  4. 从头学Java17-Stream API(一)

    Stream API Stream API 是按照map/filter/reduce方法处理内存中数据的最佳工具. 本系列中的教程包含从基本概念一直到collector设计和并行流. 在流上添加中继操 ...

  5. 4.2 针对PE文件的扫描

    通过运用LyScript插件并配合pefile模块,即可实现对特定PE文件的扫描功能,例如载入PE程序到内存,验证PE启用的保护方式,计算PE节区内存特征,文件FOA与内存VA转换等功能的实现,首先简 ...

  6. P3574 [POI2014] FAR-FarmCraft 吐槽 + 题解

    洛谷上面的题解写的真的不太好,有很多错误,我来谈谈自己的理解. 设 \(f[i]\) 表示以 \(i\) 为根节点的子树中(包括节点 \(i\))的所有人安装好游戏所需要的时间(与下面的 \(g[i] ...

  7. 图像处理_ISP_坏点矫正

    1 坏点介绍 图像坏点(Bad pixel) : 图像传感器上光线采集点(像素点)所形成的阵列存在工艺上的缺陷,或光信号进行转化为电信号的过程中出现错误,从而会造成图像上像素信息错误,导致图像中的像素 ...

  8. LAL v0.36.7发布,Customize Sub,我有的都给你

    Go语言流媒体开源项目 LAL 今天发布了v0.36.7版本. LAL 项目地址:https://github.com/q191201771/lal 老规矩,简单介绍一下: ▦ Customize S ...

  9. MIT 6.5840 Raft Implementation(2B, Log Replication)

    Raft实现思路+细节(2B) 任务分解 2B中最主要的任务就是进行日志的复制.Raft是一个强领导人的系统,这意味着所有的日志添加都是由领导人发起的,与之相类似的,还有很多其他的结论(它们都是比较显 ...

  10. git报错:SSL certificate problem: unable to get local issuer certificate

    原因:在windows系统中git没有获取到ssl证书 解决方案 输入以下命令: git config --global http.sslBackend schannel 之后再执行操作就可以啦 另: ...