bzoj3289 树状数组+莫队

贝塞尔曲线在机器人路径平滑中的实战应用与优化 本文深入探讨了贝塞尔曲线算法在机器人路径平滑中的核心应用。通过对比G1CBS与G2CBS两种方法,详细阐述了如何实现从切线连续到曲率连续的平滑优化,以满足不同机器人对运动平稳性和效率的需求,并提供了完整的Python代码实现与关键参数调优指南。 阅读详情

这是本蒟蒻的第一篇博客,在此手动庆祝一下~~
其实今天本来想写一道树链剖分的题但是一直没过(蒟蒻的无奈)……所以只好写前几天莫队的题解啦
这道题分为两个知识点,树状数组和莫队
1。莫队 就是最基本的套路啦,分块+离线排序
2。树状数组 我做这道题本来是奔着莫队的,没想最开始还被树状数组坑了
一定要注意分类讨论两点:
1)pl->a[i].l 和pr->a[i].r 的变化会使ans加还是减
2)
pl->a[i].l ,所影响的是增减的数和它后面的数所组成的逆序对,所以查询树状数组最后return x后面的数
pr->a[i].r ,所影响的是增减的数和它前面的数所组成的逆序对,所以查询树状数组最后return x前面的数
代码见下:

/**************************************************************
    Problem: 3289
    User: DD_D
    Language: C++
    Result: Accepted
    Time:5544 ms
    Memory:2400 kb
****************************************************************/

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=50000+5;
int siz[N],val[N],pos[N];
int tree[N],rt[N];
int n,q,sum,ans;
struct data{
    int l,r,id;
}a[N];
int cmp(data a,data b)
{
    if(pos[a.l]==pos[b.l]) return  a.r<b.r;
    return a.l<b.l;
}
int cmp_id(data a,data b)
{
    return a.id<b.id;
}
int lowbit(int x)
{
    return x&(-x);
}
void add(int x,int d)
{
    for(int i=x;i<=n;i+=lowbit(i))
    tree[i]+=d;
    sum+=d;
}
int query1(int x)//统计树状数组后面 
{
    int tot=0;
    for(int i=x;i>0;i-=lowbit(i))
    tot+=tree[i];
    return sum-tot;
}
int query2(int x)//统计树状数组前面 
{
    int tot=0;
    for(int i=x-1;i>0;i-=lowbit(i))
    tot+=tree[i];
    return tot;
} 
void init()
{
    scanf("%d",&n);
    int block=(int)sqrt(n);
    for(int i=1;i<=n;i++){
        pos[i]=(i-1)/block+1;
        scanf("%d",&siz[i]);
        val[i]=siz[i];
    }
    sort(val+1,val+1+n);
    int tot=unique(val+1,val+1+n)-val;
    for(int i=1;i<=n;i++)
    siz[i]=lower_bound(val+1,val+tot,siz[i])-val;
    scanf("%d",&q);
    for(int i=1;i<=q;i++){
        scanf("%d%d",&a[i].l,&a[i].r);
        a[i].id=i;
    }
}
void solve()
{
    for(int i=a[1].l;i<=a[1].r;i++)
        add(siz[i],1),ans+=query1(siz[i]);
    rt[a[1].id]=ans;
    int pl=a[1].l,pr=a[1].r;
    for(int i=2;i<=q;i++){
        for(;pl<a[i].l;pl++)//多了 统计前面的 
        add(siz[pl],-1),ans-=query2(siz[pl]);
        for(;pl>a[i].l;pl--)//已有的数都是在它的后面,所以统计树状数组前面 
        add(siz[pl-1],1),ans+=query2(siz[pl-1]);
        for(;pr<a[i].r;pr++)//少了 统计后面的 
        add(siz[pr+1],1),ans+=query1(siz[pr+1]);
        for(;pr>a[i].r;pr--)//多了 
        add(siz[pr],-1),ans-=query1(siz[pr]);
        if(a[i].r==a[i].l) {
            rt[a[i].id]=0;
            continue;
        }
        rt[a[i].id]=ans;
    }
}
int main()
{
    init();
    sort(a+1,a+1+q,cmp);
    solve();
    sort(a+1,a+1+q,cmp_id);
    for(int i=1;i<=q;i++)
    printf("%d\n",rt[i]);
    return 0;
}

STM32驱动HC-SR04超声波模块:两种精准测距方案详解 本文详解STM32驱动HC-SR04超声波模块的两种精准测距方案:定时器中断计数法和外部中断边沿检测法。涵盖硬件连接、代码实现与优化技巧,帮助开发者根据精度和复杂度需求选择合适方案,提升超声波测距在嵌入式项目中的稳定性和准确性。 阅读详情

相关推荐

滤波器设计实战:Filter Solutions软件从入门到精通

本文是Filter Solutions滤波器设计软件的实战指南,从入门到精通。通过设计一个低通数字滤波器的完整流程,详细讲解了参数设置、FIR/IIR选择、窗函数及逼近函数应用。文章重点介绍了如何利用这款经典工具高效完成滤波器设计、性能权衡,并将设计成果导出至MATLAB等平台进行实际验证与应用,是信号处理工程师提升效率的实用参考。

weixin_29095049的博客 531

BZOJ3289

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题意:求区间逆序对。 题解:莫队,然后树状数组求逆序对。 注意:要离散化。 比如l,r这段区间增加前面增加一个数a[l-1], 只用考虑l,r这段区间里比 a[l-1]-1 小的数,记为cnt, 答案减去cnt,然后更新下. 比如l,r这段区间后面加一个数a[r+1],

qq_36876305的博客 341

量化交易新手入门:从零开始搭建你的第一个Python交易策略(附完整代码)

本文为量化交易新手提供从零开始搭建Python双均线策略的完整指南,涵盖环境配置、数据获取、策略实现及风险管理等关键步骤。通过详细的代码示例和实践建议,帮助读者快速掌握量化交易的核心技术,并避免常见陷阱。文章特别强调Python在量化交易中的技术革新优势,适合希望进入金融科技领域的初学者。

weixin_26905487的博客 443

【BZOJ 3289】 Mato的文件管理

【BZOJ 3289】 Mato的文件管理 莫队算法~

Regina8023 1222

图形学基础知识:着色(三)Rendering Pipeline与Shader

管线(Pipeline) 什么是管线? 管线我们可以理解为流水线,流水线大家都懂,就是工厂里面生产东西的一整套流程。例如饮料厂要生产饮料,需要洗瓶子,倒饮料,加盖,包装等等,这一整套过程就是流水线。那么我们要把一个三维场景渲染成一幅二维的图像,同样需要一个先干嘛再干嘛然后干嘛最后干嘛的过程,这个过程或流水线,我们就称之为管线。 实时渲染管线(Real-time Rendering Pipeline) 通过前面几篇的学习,我们知道了要把一个三维场景渲染成一幅二维的图像大致分为以下几个步骤: M.

王王王渣渣的博客 2532

Windows下Anaconda换清华镜像源最全指南(含常见问题解决)

本文提供了一份详尽的Windows系统下Anaconda配置清华镜像源的完整指南。针对网络下载缓慢的痛点,文章详细对比了命令行添加与直接编辑配置文件两种主流方法,并重点解决了配置过程中常见的文件缺失、安装失败、环境求解缓慢等疑难问题,帮助用户一劳永逸地提升包管理效率。

brandy的博客 337

【BZOJ】3289: Mato的文件管理【区间逆序对,莫队套树状数组】

传送门:【BZOJ】3289: Mato的文件管理 my code: #include #include #include #include using namespace std ; typedef long long LL ; #define rep( i , a , b ) for ( int i = ( a ) ; i < ( b ) ; ++ i ) #defi

poursoul 1556

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了基于YOLOv11的YOLOFuse多模态融合技术,重点探讨了RGB与红外线(IR)协同检测的实现原理与实战应用。文章详细介绍了双流架构与数据级、特征级、决策级三种融合策略,并通过实战案例展示了其在低光照、复杂环境下显著提升检测精度与鲁棒性的优势,为全天候安防、自动驾驶等场景提供了有效的技术解决方案。

weixin_29041195的博客 650

[BZOJ3289]Mato的文件管理 Solution

题意:给一个序列,若干个询问,每次询问一个区间的逆序对个数。 考虑数据范围很小,就可以使用莫队,如何计算扩展的一个点的贡献?用树状数组维护即可。 code:code:code: #include <bits/stdc++.h> #define int long long #define regi register int int n,q; int a[51000]; int tmp[5...

chenzhuo__的博客 187

INS/伪距组合导航(1)

星间单差GNSS/INS伪距紧组合

u014430081的博客 874

Unity Sprite Editor切片功能详解:如何快速将一张大图拆分成多个小图(附常见问题解决)

本文详细解析了Unity Sprite Editor的切片功能,指导开发者如何高效地将一张大图拆分为多个独立小图。文章涵盖了自动与手动切片操作步骤、轴心点设置、子精灵命名管理等核心技巧,并针对切片错位、性能优化等常见问题提供了实用解决方案,帮助提升2D游戏资源处理效率。

i0j1k2l3m的博客 647

BZOJ_3289_Mato的文件管理_莫队+树状数组

BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 。为了防止他人偷拷,这些资料都是加密过的,只能用Mato自己写的程序才能访问。Mato每天随机选一个区间[l,r ],他今天就看编号在此区间内的这些资料。Mato有一个习惯,他总是从文件大...

185

PX4从放弃到精通(五):PX4中的姿态表示方法及转换关系

文章目录机体坐标系与地理坐标系一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 机体坐标系与地理坐标系 在实际应用中,加速度计的测量轴是由运动平台安装固定此器件的轴向决定的。这些坐标轴就形成了载体坐标系,定义如下: 坐标原点设在载体质心(这样可简化运动方程的推导); y轴指向载体前方,称为横滚轴,横滚角以y轴为起始旋转轴而得到,符合右手定则; x轴与y轴夹角90°,指向载体横向,称为俯仰轴,俯仰角以x轴为起始旋转轴而得到,符合右手定则; z轴与x轴、y轴构成右手笛卡儿坐标系,指向载体垂直方向

超维空间科技的博客 8113

【BZOJ3289】【莫队分块+树状数组求逆序对】Mato的文件管理

3289: Mato的文件管理 Time Limit: 40 Sec  Memory Limit: 128 MB Submit: 1123  Solved: 495 [Submit][Status][Discuss] Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号。为了防止他人偷拷,这些资料都是加密过的

snowy_smile的博客 754

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

BZOJ 3289 莫队 树状数组

BZOJ 3289 题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=3289 题意: 问[L,R]区间最少交换几次相邻数字使得整个序列有序。 思路: 统计逆序对,用树状数组。然后跑一遍莫队。 离散化部分容易超时,所以直接修改了数组。 源码:#include <cstdio> #include <cstring> #inclu

beihai2013 387

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

bzoj3289 -- 莫队+树状数组

离线。将大小离散,然后用莫队更新树状数组和答案就可以了。 代码: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 #include<cmath> 6 using namesp...

205

BZOJ 3289: Mato的文件管理 【莫队 + 树状数组】

任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=3289 3289: Mato的文件管理 Time Limit:40 SecMemory Limit:128 MBSubmit:4917Solved:2041[Submit][Status][Discuss] Description Mato同学从各路神犇以...

weixin_30299539的博客 111

bzoj3289 Mato的文件管理 莫队+树状数组

题目链接:传送门 题目大意: 给定一个nnn个数的序列,有qqq个询问,每个询问给出区间[l,r][l,r][l,r],要求输出[l,r][l,r][l,r]区间内逆序对的数量。 n,q&lt;=5∗104n,q&lt;=5*10^4n,q<=5∗104 容易看出,最小的交换次数=区间逆序对个数(很显然,因为一次交换只能减少一个逆序对) ...

The_OIer的博客 300

BZOJ3289 Mato的文件管理 莫队 树状数组

原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3289.html 题目传送门 - BZOJ3289 题意   给定一个序列 $a$ , 有 $n$ 个元素。   给定 $m$ 次询问,每次问一个区间内,只通过交换相邻元素,问至少交换多少次才能使得区间升序。   $n,m\leq 50000$ , $a_i$ 需要离散化 题解   一道不...

weixin_30262255的博客 105

[bzoj3289]Mato的文件管理 莫队+树状数组

莫队

Unlimited Code Works 288

BZOJ 3289 Mato的文件管理 | 莫队 树状数组

BZOJ 3289 Mato的文件管理 题意 求区间逆序对。 题解 在莫队的基础上使用树状数组求逆序对。 在当前区间左侧加入一个数时,res += 原区间比它小的数的个数; 在当前区间右侧加入一个数时,res += 原区间比它大的数的个数; 在当前区间左侧删除一个数时,res -= 原区间比它小的数的个数; 在当前区间右侧删除一个数时,res -= 原区间比它大的数的个数; #include &l...

weixin_30780221的博客 116

【BZOJ3289】Mato的文件管理 莫队+树状数组

题目大意:给定一个长度为 N 的序列,M 个询问,每次询问区间逆序对的个数。 题解:用树状数组加速答案转移。 代码如下 #include <bits/stdc++.h> #define fi first #define se second #define pb push_back #define mp make_pair #define all(x) x.begin(),x....

K1385170的博客 163

bzoj 3289: Mato的文件管理 莫队+树状数组

bzoj 3289: Mato的文件管理 莫队+树状数组

Rising_shit的博客 447

bzoj3289(莫队+树状数组)

经典题目。 每次删除和加入直接在树状数组里进行统计即可 #include&amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;gt; using namespace std; int a[50100] , n , Q , m; int tmp[50100]; int tr[50100] , belong[50100]; unsigned int ans,out[50100]; struct data { ...

a1035719430的博客 366

莫队+树状数组 题解【bzoj3289】Mato的文件管理

首先题目意思很简单 就是求每一段区间内的逆序对个数 在我认知中有两种求逆序对的方法 1.归并排序可以求逆序对 2.树状数组求逆序对 修改和查询都是O(logn)的复杂度 本题要不断修改逆序对数据结构只能选择树状数组 然后 就往莫队上去套咯 离线求解 分块 然后按左端点所在的块排序 再按后端点排序 定义一个L,R,不断++,–,update树状数组和更新ans就好了 不过感觉有点抽象 一个

With_thewind的博客 622
下一篇: bzoj2160 拉拉队排练 manacher+差分
五彩蒟蒻DDD
博客等级 码龄10年 20粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值