poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)

通达信-申万宏源金融终端本地数据转sqlite3,2、解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据 为量化做准备,通达信-申万宏源金融终端本地数据转sqlite3,解析申万宏源C:/zd_swhy_gm/vipdoc/sh/lday的sh600000股票数据 阅读详情

Description

In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input sequence
9 1 0 5 4 ,

Ultra-QuickSort produces the output
0 1 4 5 9 .

Your task is to determine how many swap operations Ultra-QuickSort needs to perform in order to sort a given input sequence.

Input

The input contains several test cases. Every test case begins with a line that contains a single integer n < 500,000 -- the length of the input sequence. Each of the the following n lines contains a single integer 0 ≤ a[i] ≤ 999,999,999, the i-th input sequence element. Input is terminated by a sequence of length n = 0. This sequence must not be processed.

Output

For every input sequence, your program prints a single line containing an integer number op, the minimum number of swap operations necessary to sort the given input sequence.

Sample Input

5
9
1
0
5
4
3
1
2
3
0

Sample Output

6
0

逆序数就是数中各位在它前面有多少个数比它大,求出这些元素个数之和。

 

今天看了个树状数组,可以很好的解决这个问题,普通方法需要O(N^2)复杂度,用树状数组只需要O(NlongN)

 

树状数组实际上还是一个数组,只不过它的每个元素保存了跟原来数组的一些元素相关的结合值。

若A为原数组,定义数组C为树状数组。C数组中元素C[ i ]表示A[ i –lowbit( i ) + 1]至A[ i ]的结合值。

lowbit(i)是i的二进制中最后一个不为零的位数的2次方,可以这样计算

lowbit(i)=x&(-x)

lowbit(i)=x&(x^(x-1))

 

 

 

当想要查询一个sum(n)时,可以依据如下算法即可:

step1: 令sum = 0,转第二步; step2: 假如n <= 0,算法结束,返回sum值,否则sum = sum + Cn,转第三步; step3:  令n = n – lowbit(n),转第二步。

n = n – lowbit(n)这一步实际上等价于将n的二进制的最后一个1减去。而n的二进制里最多有log(n)个1,所以查询效率是log(n)的。

 

修改一个节点,必须修改其所有祖先,最坏情况下为修改第一个元素,最多有log(n)的祖先。所以修改算法如下(给某个结点i加上x):

step1: 当i > n时,算法结束,否则转第二步; step2: Ci = Ci + x, i = i + lowbit(i)转第一步。

i = i +lowbit(i)这个过程实际上也只是一个把末尾1补为0的过程。

 

求逆序的思路:

 

可以把数一个个插入到树状数组中, 每插入一个数, 统计比他小的数的个数,对应的逆序为 i- getsum( data[i] ),其中 i 为当前已经插入的数的个数, getsum( data[i] )为比 data[i] 小的数的个数,i- getsum( data[i] ) 即比 data[i] 大的个数, 即逆序的个数。最后需要把所有逆序数求和,就是在插入的过程中边插入边求和。

 

下面是代码:

 


#include 
  
     
#include 
   
      
#include
    
     
#include
     
      
using namespace std;  
struct  lisan{
	int a;
	int i;
}a[500005];
int b[500005],tree[500005];
int read(int k)
{  
    int sum=0;  
    while(k)  
    {  
        sum+=tree[k];  
        k-=k&-k;
    }
    return sum;
}  
void add(int k,int num,int n)  
{  
    while(k<=n)  
    {  
        tree[k]+=num;  
        k+=k&-k;  
    }  
} 
bool cmp(lisan a,lisan b){  
    return a.a
      
     
    
   
  

2017阿里内推笔试题--算法工程师(运筹优化) 2017阿里内推笔试题–算法工程师(运筹优化)题目沐哲是一个菜鸟仓库的一个拣货员,但他有非常个怪异的习惯。每次拣货的重量都要比之前拣的一个轻,每次拣到货后都可以得到1块钱,沐哲想知道这样最多能赚多少钱 32 34 7 33 21 2 13 12 3 11 26 36 16 30 22 1 24 14 20 23 25 5 19 29 27 15 9 17 31 4 6 18 8 10 3 阅读详情

相关推荐

SAP成本计划BAPI接口BAPI_COSTACTPLN_POSTPRIMCOST深度解析与实战指南

在SAP ERP系统中,成本计划是财务与控制模块的核心功能,它涉及对企业未来成本支出的预测与规划。其原理是通过结构化数据模型,将成本要素分配到具体的成本对象上,以实现预算编制和成本控制。这一技术的核心价值在于实现成本数据的标准化、自动化处理,从而提升财务流程效率与数据准确性。在应用场景上,成本计划广泛应用于年度预算编制、项目成本预测、系统间数据集成以及历史数据迁移等关键业务环节。本文聚焦于实现上述流程自动化的关键技术——SAP标准接口BAPI_COSTACTPLN_POSTPRIMCOST,并深入探讨其在高

weixin_29657209的博客 350

树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告

树状数组 离散化 求逆序数POJ 2299Ultra-QuickSort解题报告

Dafang_Xu的博客 829

CREO5.0二次开发+VS2019配置详解

CREO5.0+VS2019配置更新 一、CREO5.0 配置 二、Visual Studio 2019配置 新建MFC DLL项目 文件>新建>项目,选择MFC DLL,如下图所示 项目名称CREO1 2、配置设置 打开项目属性: 配置资源管理器设置: 设置包含目录、库目录(根据自己CREO的安装位置来设置): 包含目录: 库目录: 预处理器设置: 把下面文字复...

liuyi2517的博客 1万+

POJ 2299 Ultra-QuickSort (树状数组+离散化 求逆序数)

In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sor...

dddddd12345456的博客 168

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 297

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2555

poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)

1696

【漏洞复现】CVE-2024-44902 Thinkphp反序列化漏洞

Thinkphp v6.1.3至v8.0.4版本中存在反序列化漏洞,攻击者可利用此漏洞执行任意代码。

渗透之路,攻防之间皆学问 6709

POJ 2299 Ultra-QuickSort(树状数组+离散化+求逆序数)

In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted i...

H4ppyD0g的博客 303

基于综合阻抗特征的配电架空线路单相断线故障区段定位研究

本文提出了一种基于综合阻抗特征的配电架空线路单相断线故障区段定位方法。通过分析故障后正序、负序阻抗变化,构造综合阻抗判据实现精准定位。仿真结果表明:该方法能有效识别故障区段,差异度判据显著(故障区段达0.508,非故障区段<0.016);对过渡电阻(1-200Ω)和负荷变化具有强鲁棒性,定位准确率不受影响。相比传统方法,综合阻抗法放大了断线故障特征,解决了弱故障信号检测难题,为配电网安全运行提供了可靠的技术手段。

AI的内部世界的博客 81

SAP 错误消息调试之七种武器:让所有的错误消息都能被定位

目录 长生剑 - SAPGUI Where Used List 碧玉刀 - ABAP调试器观察点 霸王枪 - ABAP调试器动态断点 多情环 - ABAP代码静态扫描 孔雀翎 - SAT 离别钩 - ST05 拳头 - 迷之方法??? Jerry在2018年开始用中文在微信公众号平台上写作之前,在SAP官方社区上总共写了639篇英文博客。 其中有一篇写于2013年介绍ABAP调试技巧的博客:

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2809

poj 2299 Ultra-QuickSort(离散化+树状数组求逆序数)

Ultra-QuickSortTime Limit: 7000MS Memory Limit: 65536KTotal Submissions: 67585 Accepted: 25315DescriptionIn this problem, you have to analyze a particular sorting algorithm. The algorithm processes a ...

BBHHTT的博客 266

【WRF数据介绍第一期】静态地理数据介绍及下载

WRF数据介绍第一期:静态地理数据介绍及下载

WW、forever的博客 4810

【树状数组--求逆序数(离散化)】poj2299 Ultra-QuickSort

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 61575   Accepted: 22868 Description In this problem, you have to analyze a particular sorti

Hi_jiaxinwei的博客 337

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【树状数组】poj2299 Ultra-QuickSort(离散化+树状数组求逆序数)

离散化+树状数组求逆序数

Gzbgreat的博客 341

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

POJ2299 Ultra-QuickSort 树状数组(求逆序数)+离散化

POJ2299 Ultra-QuickSort #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;algorithm&gt; #define lowbit(x) x&amp;-x//位操作 using namespace std; const int MAX=5*1e5+5; int aa[MAX],c[MAX],n...

Qianyri的博客 340

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

(树状数组求逆序数+离散化+归并排序求逆序数)POJ 2299 Ultra-QuickSort

问题:Ultra-QuickSort POJ - 2299多组数据,每组一个序列,n个元素(n不大于500000,每个元素不大于999,999,999),求按照冒泡排序排序,移动相邻两个元素的次数是多少?分析:实际就是求逆序数,题虽水,但是思路很棒,收获很大一、树状数组求逆序数+离散化树状数组的博客,看这个就够:https://blog.youkuaiyun.com/The__sea/article/deta...

勉強しているユキさんです 225

poj2299 Ultra-QuickSort(树状数组求逆序数,离散化)

所谓数列的逆序数就是一个值sum,sum=b[0]+b[1]+...+b[n-1]。这里假设数列为a,其中b[i]表示在数列中在a[i]后面并且比a[i]小的数的个数。比如有数列 2 8 0 3的逆序数就是1+2+0+0=3。

Every day 614

POJ - 2299 Ultra-QuickSort 解题报告(树状数组)(求逆序数)(离散化)

目录题目描述思路分析AC代码 题目描述 链接:https://vjudge.net/problem/POJ-2299 题意:给你一组数,你能做的操作是交换两个相邻的数,令这个数列变成递增的,要求最小操作数。 思路分析 说实话,看到这样的题,感觉我已经本能反应地想到了逆序数了。。不知道是不是最近看了点线代的缘故。。 具体分析起来是这样的: 5 9 1 0 5 4 以样例为例,我们一个一个的输入,那么...

nagisa2019的博客 326

poj 2299 Ultra-QuickSort 树状数组求逆序数 离散化

题目链接:http://poj.org/problem?id=2299题意:求逆序数题解:树状数组可以求逆序数 但是数据50w,所以要离散化。 归并也可做:http://blog.youkuaiyun.com/zxy_snow/article/details/6257561 这位大牛不知道什么叫离散化 写出了离散化 Orz “就排下序,重新编数,这个据说叫离散化 = =”另外一种离散化方式吧 ( 其实就是

yxg_123的博客 428

树状数组+离散化求逆序数poj2299Ultra-QuickSort

Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the seque

luckcircle的博客 390

POJ2299 Ultra-QuickSort(树状数组求逆序数+离散化)

题意:给一个n个整数组成的序列,每次只能交换相邻的两个元素,问你最少要进行多少次交换才能使得整个整数序列上升有序。题解:      冒泡排序的交换次数等于数组中所有数的逆序数之和。逆序数可以用树状数组求出。具体操作:构建范围为1-n的树状数组,每次出现一次,该位置就加1,所以对于每个j,树状数组得到的前n项和就是满足i&lt;j,ai&lt;=aj的i的个数。从而可以用总的可以减去上面的个数,便可...

sgh666666的博客 366

POJ2299 Ultra-QuickSort——树状数组求逆序数+离散化

题目链接点击打开链接 题意:一个无序的

chenyuwen666的专栏 647

POJ 2299 Ultra-QuickSort (树状数组求逆序数+离散化)

Ultra-QuickSort Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2299 Description In this problem, you have to analyze a part

sxk 935

poj 2299 Ultra-QuickSort(求逆序数:离散化+树状数组)

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 22147   Accepted: 7897 Description In this problem, you have to analyze a particular sorting algorith...

iteye_4729的博客 140

POJ 2299 Ultra-QuickSort(树状数组+离散化—求逆序数)

Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 52498   Accepted: 19254 Description In this problem, you have to analyze a particular sorting

Chunzhen的博客 915
上一篇: hdu 2037 今年暑假不AC题解
下一篇: 树状数组
luckcircle
博客等级 码龄10年 13粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值