题目简化和分析:

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

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

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

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

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

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

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. memcached使用中踩的一些坑

    背景 线上启用memcached(以下简称mc)作为热点缓存组件已经多年,其稳定性和性能都经历住了考验,这里记录一下踩过的几个坑. 大key存储 某年某月某日,观察mysql的读库CPU占比有些异常偏 ...

  2. git reset --hard 撤回后commit的代码消失了的解决办法

    楼主在今天的工作中使用了这个命令 git reset --hard 撤回后commit的代码消失了,因为有commit,所以暂时得到了拯救,太不容易了,差点以为自己写的代码没了. 网上到处找帖子,看看 ...

  3. TornadoFx 页面之间的数据传递

    原文地址: TornadoFx 页面之间的数据传递 - Stars-One的杂货小窝 和Android开发一样,经常遇到两个页面之间需要进行数据的交互传输,本文讲解下TornadoFx框架中,页面之间 ...

  4. 【FAQ】关于CP反馈的联运应用的常见结算问题小结

    问题一:为什么在"我的账户">>"收益"里面的金额和支付报表中的金额对不上 ? 关于联运类应用付费产品在华为平台上结算问题,您可以详细参考一下&qu ...

  5. 【Python】Locust持续优化:InfluxDB与Grafana实现数据持久化与可视化分析

    前言 在进行性能测试时,我们需要对测试结果进行监控和分析,以便于及时发现问题并进行优化. Locust在内存中维护了一个时间序列数据结构,用于存储每个事件的统计信息. 这个数据结构允许我们在Chart ...

  6. PDF书签的编辑器,基于(python、Tkinter)

    使用 脚本 在github下载源码. 安装python3 安装必要的python包 pip install numpy pip install pandas pip install PyMuPDF p ...

  7. 智能制造之路—从0开始打造一套轻量级MOM平台

    一.概述 面对数字化浪潮,MOM需求迈入上升期,数字化从"可选项"变成了企业竞争"必选项".制造行业每个工厂的生产逻辑都不尽相同,流程的梳理.数据统一化都需要调 ...

  8. jquery解决跨域问题

    在Ajax请求的url不是本地或者同一个服务器下面的URI,最后虽然请求显示为200,但是不会返回任何数据,事实上简单来说请求同一个域名下的url或者说用不带http的绝对路径和相对路径请求是没有任何 ...

  9. QMainWindow类中比较重要的方法

    方法和描述 addToolBar():添加工具栏 centralWidget():返回窗口中心的一个空间,未设置时返回NULL menuBar(): 返回主窗口的菜单栏 setCentralWidge ...

  10. chrome浏览器插件react devtools、redux devtools,无需安装、解压即可用

    react devtools用于调试react代码,可以查看到props.state的值,以及定义的hooks,而redux devtools可以追踪到action的派发.store的变化,两个都是r ...