Day2:T4求逆序对(树状数组+归并排序)

本文深入探讨了使用树状数组和归并排序两种方法求解逆序对问题,详细解释了树状数组的原理、低比特位的作用,以及归并排序算法在求逆序对上的应用。同时介绍了离散化概念,通过实例演示了如何利用这些技术高效解决实际问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

T4: 求逆序对

A[I]为前缀和

推导 (A[J]-A[I])/(J-I)>=M

A[j]-A[I]>=M(J-I)

A[J]-M*J>=A[I]-M*I

设B[]=A[]-M*();

B[J]>=B[I]

也就是求逆序对;

求逆序对的方法主要有两种:

      归并排序;

      树状数组;

 

这里两种方法都学习一下:

 1.之前对于树状数组的印象就只有单点修改和区间求和

一直觉得lowbit是一个神奇的东西(至今没有搞懂原理)

上网搜了一下用树状数组求逆序对的方法,发现有一个大神写的很棒....看得很明白(感谢~~)

 

顺便学了一下离散化,也就是文中的:

        for(i=1;i<=n;i++)

        {
            scanf ( "%d" ,&in[i].v);
            in[i].order=i;
        }
        sort(in+1,in+n+1,cmp);
        for (i=1;i<=n;i++) aa[in[i].order]=i;

有点像指针操作。(自己对离散化的初步感受是这样的)

 

然后就是根据树状数组的原理求逆序对了

其实一直不是很清楚树状数组的原理,翻了翻书才有一点点的领悟吧

1).首先是update中的c数组的理解,上面链接的那个资料中解释的过程会误以为c是统计某个数的个数的

仔细看白书会发现其实并不是这样,c数组是用来维护某一区间的区间和的

getsum的操作也就是把沿途中的长条所表示的区间和加起来,这样可以节省时间(注意理解图)

2).具体的,标程中的c是用来记录在某个区间里有多少个数比i小

3).理解lowbit的过程,同样需要仔细回看白书的解释

无论是i=t-n;i+=lowbit(i)或是i-=lowbit(i)都是一个找父亲的过程

4).其实说白了lowbit到底有什么用呢,其实也就是节省了时间,做到快速简便而已吧

 

嗯...这样的话,对于树状数组的原理算是搞懂了QAQ感觉这种东西很容易忘记怎么办?

给以后的自己一个忠告呗~先看白书,好好理解图,再看自己的感悟,最后看链接资料;

 

2.另一种方法就是很传统的用:归并排序求逆序对

这种算法求逆序对也很容易理解,简单的说也无非就是基于快排思想+统计个数

主要的程序:p版的...不要在意这些细节...

procedure mergesort(l,r:longint);
var
  mid,i,j,k:longint;
begin
  if l=r then exit;
  mid:=(l+r) div 2;
  mergesort(l,mid);
  mergesort(mid+1,r);
  i:=l;j:=mid+1;k:=l;
  while (i<=mid) and (j<=r) do
    if v[i]<v[j] then
      begin
        push(k,i);
        ans:=ans+r-j+1;//在l..mid 和 mid+1 ..r中j处于[mid+1,r]中且这段是升序的,那么如果v[j]>v[i]那么v[j..r]都会大于//v[i]这和求逆序对有异曲同工之妙
      end
        else
          push(k,j);
  while i<=mid do push(k,i);
  while j<=r do push(k,j);
  for i:=l to r do v[i]:=temp[i];
end;

 

 

根据推导建立等式,之后输出ans即可

很好理解就不多说了...

晚安民那

转载于:https://www.cnblogs.com/polebug/p/3961907.html

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值