解题报告

题意:

求逆序数。

思路:

线段树离散化处理。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define LL long long
using namespace std;
LL sum[2001000],num[501000],_hash[501000];
void push_up(int rt)
{
sum[rt]=sum[rt*2]+sum[rt*2+1];
}
void update(int rt,int l,int r,int p,LL v)
{
if(l==r)
{
sum[rt]=+v;
return;
}
int mid=(l+r)/2;
if(p<=mid)update(rt*2,l,mid,p,v);
else update(rt*2+1,mid+1,r,p,v);
push_up(rt);
}
LL q_sum(int rt,int l,int r,int ql,int qr)
{
if(ql>r||qr<l)return 0;
if(ql<=l&&r<=qr)return sum[rt];
int mid=(l+r)/2;
return q_sum(rt*2,l,mid,ql,qr)+q_sum(rt*2+1,mid+1,r,ql,qr);
}
int main()
{
int n,i,j;
while(~scanf("%d",&n))
{
LL ans=0;
if(!n)break;
memset(_hash,0,sizeof(_hash));
memset(num,0,sizeof(num));
memset(sum,0,sizeof(sum));
for(i=0; i<n; i++)
{
scanf("%LLd",&num[i]);
_hash[i]=num[i];
}
sort(_hash,_hash+n);
int m=unique(_hash,_hash+n)-_hash;
for(i=0; i<n; i++)
{
int t=lower_bound(_hash,_hash+m,num[i])-_hash+1;
ans+=q_sum(1,1,m,t+1,m);
update(1,1,m,t,1);
}
printf("%lld\n",ans);
}
return 0;
}

Ultra-QuickSort
Time Limit: 7000MS   Memory Limit: 65536K
Total Submissions: 41278   Accepted: 14952

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

Source

最新文章

  1. #研发解决方案介绍#Tracing(鹰眼)
  2. Http请求中Content-Type讲解以及在Spring MVC中的应用
  3. 一款符合当前主流审美的Swing外观(Look and Feel)_测试版发布
  4. javascript 命令方式 测试例子
  5. android studio无法关联源码
  6. 草珊瑚的css基础
  7. UIScrollView控件详解
  8. 再探Delphi2010 Class的构造和析构顺序
  9. html5的116个标签
  10. 深入浅出AQS之条件队列
  11. 最全的命令行(gradle)打包安卓apk
  12. Java集合框架的四个接口
  13. arcgis api 3.x for js 共享干货系列之一自写算法实现地图量算工具(附源码下载)
  14. NLP文本相似度
  15. Django 创建超级用户
  16. Java多线程学习笔记之一线程基础
  17. 3种启动tornado的方式
  18. UVA-10127 Ones (数论)
  19. 轨至轨运算放大器 rail to rail
  20. Android Performance 性能提升

热门文章

  1. nodejs实现网站数据的爬取
  2. Redis那些事(一) — Redis简介
  3. POI导出,开发中经常会遇到数据导出这样的问题,下面是我在开发中采用的解决方法,大家可以参考,具体的实现害的结合你自身的业务逻辑
  4. Linux test命令
  5. ubuntu卸载编译安装的软件
  6. 【URAL 1989】 Subpalindromes(线段树维护哈希)
  7. There is no getter for property named &#39;id&#39; in class &#39;java.lang.String&#39;
  8. 东软Unieap平台
  9. 【RMAN】RMAN跨版本恢复(下)--大版本异机恢复
  10. windows 2008、2012防火墙添加入站规则教程(端口例外)