题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180

解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组。因为这题中的数列有重复的而且范围特别大,所以要进行离散化,离散化的方法是,

首先按照输入的数字排个序,然后把整个数列扫一遍,得出每个数字离散化的结果,然后再按照输入的顺序把顺序调整回来就OK 了。线段树部分就不说了。

 #include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef __int64 INT;
const int maxn = +; struct node
{
int data,cixu,dd;
}que[maxn]; struct Node
{
INT data;
int l,r;
}tree[*maxn]; bool cmp1(node a,node b)
{
return a.data <= b.data;
}
bool cmp2(node a,node b)
{
return a.cixu < b.cixu;
}
void maketree(int p)
{
if(tree[p].l == tree[p].r)
return ;
int mid = (tree[p].l + tree[p].r) / ;
tree[*p].data = ;
tree[*p].l = tree[p].l;
tree[*p].r = mid;
maketree(*p);
tree[*p+].data = ;
tree[*p+].l = mid + ;
tree[*p+].r = tree[p].r;
maketree(*p+);
}
INT find(int p,int l,int r)
{
if(l > r)
return ;
if(tree[p].l == l && tree[p].r == r)
return tree[p].data;
int mid = (tree[p].l + tree[p].r) / ;
if(r <= mid)
return find(*p,l,r);
else if(l <= mid && r > mid)
return find(*p,l,mid) + find(*p+,mid + ,r);
else return find(*p+,l,r);
}
void push(int p,int d)
{
tree[p].data++;
if(tree[p].l == tree[p].r)
return ;
int mid = (tree[p].l + tree[p].r) / ;
if(d <= mid)
push(*p,d);
else push(*p+,d);
}
int main()
{
int n;
scanf("%d",&n);
for(int i = ;i <= n;++i)
{
scanf("%d",&que[i].data);
que[i].cixu = i;
}
sort(que+,que+n+,cmp1);
int f = -;
que[].data = 0x7fffffff; //只要一个跟所有输入的数都不同的就行了
for(int i = ;i <= n;++i)
{
if(que[i].data != que[i-].data)
f++;
que[i].dd = f;
}
tree[].data = ;
tree[].l = ;
tree[].r = f;
maketree();
sort(que+,que+n+,cmp2);
INT tot = ;
for(int i = ;i <= n;++i)
{
tot += find(,que[i].dd + ,f);
push(,que[i].dd);
}
printf("%I64d\n",tot);
return ;
}

SGU 180 Inversions(离散化 + 线段树求逆序对)的更多相关文章

  1. 4163 hzwer与逆序对 (codevs + 权值线段树 + 求逆序对)

    题目链接:http://codevs.cn/problem/4163/ 题目:

  2. BNU 2418 Ultra-QuickSort (线段树求逆序对)

    题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=2418 解题报告:就是给你n个数,然后让你求这个数列的逆序对是多少?题目中n的范围是n & ...

  3. HDU 4911 http://acm.hdu.edu.cn/showproblem.php?pid=4911(线段树求逆序对)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4911 解题报告: 给出一个长度为n的序列,然后给出一个k,要你求最多做k次相邻的数字交换后,逆序数最少 ...

  4. hdu1394(线段树求逆序对)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树功能:update:单点增减 query:区间求和 分析:如果是0到n-1的排列,那么如果 ...

  5. poj2299 Ultra-QuickSort(线段树求逆序对)

    Description In this problem, you have to analyze a particular sorting algorithm. The algorithm proce ...

  6. hdu 6318 Swaps and Inversions (线段树求逆序对数)

    Swaps and Inversions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  7. FZU2018级算法第五次作业 m_sort(归并排序或线段树求逆序对)

    首先对某人在未经冰少允许情况下登录冰少账号原模原样复制其代码并且直接提交的赤裸裸剽窃行为,并且最终被评为优秀作业提出抗议! 题目大意: 给一个数组含n个数(1<=n<=5e5),求使用冒泡 ...

  8. HDU 1394 线段树求逆序对

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  9. POJ 2188线段树求逆序对

    题目给的输入是大坑,算法倒是很简单-- 输入的是绳子的编号wire ID,而不是上(或下)挂钩对应下(或上)挂钩的编号. 所以要转换编号,转换成挂钩的顺序,然后再求逆序数. 知道了这个以后直接乱搞就可 ...

随机推荐

  1. 自己保留:data provider

    <system.data>    <DbProviderFactories >      <add name="MySQL Data Provider" ...

  2. [BZOJ1089][SCOI2003]严格n元树(递推+高精度)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1089 分析: 第一感觉可以用一个通式求出来,但是考虑一下很麻烦,不好搞的.很容易发现最 ...

  3. 04.C#类型系统、值类型和引用类型(二章2.2-2.3)

    今天要写的东西都是书中一些概念性的东西,就当抄笔记,以提问对话的方式将其写出来吧,说不定以后面试能有点谈资~~~ Q1.C#1系统类型包含哪三点特性? A1.C#1类型系统是静态的.显式的和安全的. ...

  4. EntityFramework_MVC4中EF5 新手入门教程之一 ---1.创建实体框架数据模型

    Contoso University  Web 应用程序 你会在这些教程中构建的应用程序是一个简单的大学网站. 用户可以查看和更新学生. 课程和教师信息.这里有几个屏幕,您将创建. 这个网站的用户界面 ...

  5. JavaScript事件---事件入门

    内容提纲: 1.事件介绍 2.内联模型 3.脚本模型 4.事件处理函数 JavaScript事件是由访问Web页面的用户引起的一系列操作,例如:用户点击.当用户执行某些操作的时候,再去执行一系列代码. ...

  6. JS面向对象高级特性

    本篇是通过学习视频<一头扎进javascirpt高级篇>整理的一些相关知识,大致包括下面几个方面: 1 对象的创建方法 2 对象的对象属性.私有属性.类属性 3 对象的对象方法.私有方法. ...

  7. Apache CXFjar包目录(转)

    文件目录结构及相关文件的详细说明:|-bin|-docs|-etc|-lib|-licenses|-modules|-samples bin(目录) bin 目录中是 CXF 框架中所提供的代码生成. ...

  8. 【Matplotlib】 标注一些点

    相关的文档: Annotating axis annotate() command 标注的代码如下: ... t = 2 * np.pi / 3 plt.plot([t, t], [0, np.cos ...

  9. python 学习5--matplotlib画图实践

    ### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 学习参考: http://www.cnblogs.com/vamei/archive/2013/01/30/28 ...

  10. SQL多条件查询

    SELECT a.tel,a.business_code,b.name AS business_name,a.register_time FROM T_RED_USER a LEFT JOIN T_P ...