题目链接:Ultra-QuickSort

题意:

  给出了一个序列,序列中有n个数,现在每次操作能交换相邻的两个数,要求操作几次可以将这个序列转换为一个从小到大排序的序列。

题解:

  我的解法是先把所有的数和位置存下来,pair排序一下,然后从最小的数开始遍历。因为最小的数的位置我们已经知道了,那么这个数左边的数都要和这个数交换,一共要进行pos-1次交换。这里我们用树状数组来实现求某个位置前面仍然在序列中的数的个数(经典操作,先给每个位置都add(1),然后每处理一个位置在这个位置上add(-1)。可以实现logn求前缀。)

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
const int MAX_N = 5e5+;
typedef pair<long long,int> P;
P vec[MAX_N];
int res[MAX_N];
void add(int x,int num)
{
for(;x<MAX_N;x+=(x&-x))
res[x] += num;
}
long long sum(int x)
{
long long ans = ;
for(;x>;x-=(x&-x))
ans += res[x];
return ans;
}
int main()
{
int N,M,T;
while(cin>>N)
{
memset(res,,sizeof(res));
if(N==) break;
for(int i=;i<=N;i++)
{
scanf("%lld",&vec[i].first);
vec[i].second = i;
add(i,);
}
sort(vec+,vec+N+);
long long ans = ;
for(int i=;i<=N;i++)
{
int pos = vec[i].second;
ans += sum(pos)-;
add(pos,-);
}
cout<<ans<<endl;
}
return ;
}

POJ-2299 Ultra-QuickSort (树状数组)的更多相关文章

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

    题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...

  2. poj 2299 Ultra-QuickSort(树状数组求逆序数)

    链接:http://poj.org/problem?id=2299 题意:给出n个数,求将这n个数从小到大排序,求使用快排的需要交换的次数. 分析:由快排的性质很容易发现,只需要求每个数的逆序数累加起 ...

  3. POJ 2299 Ultra-QuickSort(树状数组+离散化)

    http://poj.org/problem?id=2299 题意:给出一组数,求逆序对. 思路: 这道题可以用树状数组解决,但是在此之前,需要对数据进行一下预处理. 这道题目的数据可以大到999,9 ...

  4. POJ - 2299 Ultra-QuickSort 【树状数组+离散化】

    题目链接 http://poj.org/problem?id=2299 题意 给出一个序列 求出 这个序列要排成有序序列 至少要经过多少次交换 思路 求逆序对的过程 但是因为数据范围比较大 到 999 ...

  5. Poj 2299 - Ultra-QuickSort 离散化,树状数组,逆序对

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 52306   Accepted: 19194 ...

  6. poj 2299 Ultra-QuickSort(树状数组)

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 67681   Accepted: 25345 ...

  7. POJ 2299 Ultra-QuickSort【树状数组 ,逆序数】

    题意:给出一组数,然后求它的逆序数 先把这组数离散化,大概就是编上号的意思--- 然后利用树状数组求出每个数前面有多少个数比它小,再通过这个数的位置,就可以求出前面有多少个数比它大了 这一篇讲得很详细 ...

  8. POJ 2352 Stars(树状数组)

    Stars Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 30496   Accepted: 13316 Descripti ...

  9. POJ 3321 Apple Tree (树状数组+dfs序)

    题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...

  10. poj 2828 Buy Tickets(树状数组 | 线段树)

    题目链接:poj 2828 Buy Tickets 题目大意:给定N,表示有个人,给定每一个人站入的位置,以及这个人的权值,如今按队列的顺序输出每一个人的权值. 解题思路:第K大元素,非常巧妙,将人入 ...

随机推荐

  1. Oracle GI 日志收集工具 - TFA

    1.TFA的目的: TFA是个11.2版本上推出的用来收集Grid Infrastructure/RAC环境下的诊断日志的工具,它可以用非常简单的命令协助用户收集RAC里的日志,以便进一步进行诊断:T ...

  2. MySQL:关于 unauthenticated user

    一.现象 在生产环境中我们偶尔会遇到show processlist:显示host为 unauthenticated user 这样的连接,同时伴有数据库服务器层面的load,sys cpu较高,或者 ...

  3. zabbix日常监控项java(四又分之一)

    因zabbix自带监控JMX的模板通用性差的问题,需要我们自己新建一个属于自己的模板,于是本文就出现了.... 大部分都是参考网上其他博主的文档,在此作为梳理.总结:以方便自己日后使用查询.

  4. 【教程】【FLEX】#004 反射机制

    总结: 目前用到反射的主要有两个方法 1.  getDefinitionByName    //根据类名,返回对象(反射实例化对象) 2.  describeType                 ...

  5. PHP设计模式系列 - 单例

    单例模式 通过提供自身共享实例的访问,单例设计模式用于限制特定对象只能被创建一次. 使用场景 例如数据库实例,一般都会走单例模式. 单例模式可以减少类的实例化 代码:来源InitPHP框架,先检测类有 ...

  6. 【译文】InnoDB 的不同的SQL如何加锁

    http://dev.mysql.com/doc/refman/5.6/en/innodb-locks-set.html 前置:检索如果用不到索引,会扫描全表,并根据策略加锁.所以,这就是我们合理建立 ...

  7. C++中重载决议与可访问性检查的顺序

    http://blog.csdn.net/starlee/article/details/1406781 对于如下的类: class ClxECS{public:    double Test(dou ...

  8. 20165318 2017-2018-2 《Java程序设计》第七周学习总结

    20165318 2017-2018-2 <Java程序设计>第七周学习总结 目录 学习过程遇到的问题及总结 教材学习内容总结 第11章 JDBC与MySQL数据库 错题总结 第五周错题总 ...

  9. 【node.js】模块系统、函数

    为了让Node.js的文件可以相互调用,Node.js提供了一个简单的模块系统. 一个 Node.js 文件就是一个模块,这个文件可能是JavaScript 代码.JSON 或者编译过的C/C++ 扩 ...

  10. 将本地项目托管到github 并预览

    本地文件上传到github的步骤 1.先在github上建立一个仓库 2.将此仓库download 3.在此文件夹中git bash here 4.进行如下git操作 git git init git ...