SGU180 Inversions(树状数组求逆序数)
题目:
思路:先离散化数据然后树状数组搞一下求逆序数。
离散化的方法:https://blog.csdn.net/gokou_ruri/article/details/7723378
自己对用树状数组求逆序数的理解:输入数据并利用树状数组求出前边比它小和等于它的数据有几个,用输入数据的总的个数减去比它小的数就是比它大的数res,将所有的res加起来就是要求的序列的逆序数。
如图:
把所有的res加起来就是答案了
代码:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <queue>
#include <vector>
#include <algorithm>
#define FRE() freopen("in.txt","r",stdin)
#define INF 0x3f3f3f3f using namespace std;
typedef long long ll;
typedef pair<double,int> P;
const int maxn = ;
int n;
int a[maxn],b[maxn],tree[maxn]; int lowbit(int x)
{
return x & -x;
}
void Add(int x)
{
while(x <= n)
{
tree[x]++;
x += lowbit(x);
}
}
int getSum(int x)
{
int res = ;
while(x>)
{
res += tree[x];
x -= lowbit(x);
}
return res;
}
int main()
{
scanf("%d",&n);
for(int i = ; i < n; i++)
{
scanf("%d",&a[i]);
b[i] = a[i];
}
memset(tree,,sizeof(tree));
sort(b, b+n);
int len = unique(b, b+n) - b;
for(int i = ; i < n; i++)
{
a[i] = lower_bound(b, b + len, a[i]) - b + ;
}
ll sum = ;
for(int i = ; i < n; i++)
{
Add(a[i]);
sum += i + - getSum(a[i]);
}
printf("%I64d\n",sum);
return ;
}
SGU180 Inversions(树状数组求逆序数)的更多相关文章
- Codeforces Round #301 (Div. 2) E . Infinite Inversions 树状数组求逆序数
E. Infinite Inversions ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数)
链接:http://poj.org/problem?id=2299 题意:给出n个数,求将这n个数从小到大排序,求使用快排的需要交换的次数. 分析:由快排的性质很容易发现,只需要求每个数的逆序数累加起 ...
- hdu 5147 Sequence II (树状数组 求逆序数)
题目链接 Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- poj 2299 Ultra-QuickSort(树状数组求逆序数+离散化)
题目链接:http://poj.org/problem?id=2299 Description In this problem, you have to analyze a particular so ...
- HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number ...
- Codeforces645B【树状数组求逆序数】
题意: 给你1-n的序列,然后有k次机会的操作,每一次你可以选择两个数交换. 求一个最大的逆序数. 思路: 感觉就是最后一个和第一个交换,然后往中间逼近,到最终的序列,用树状数组求一下逆序数. #in ...
- HDU 6318 - Swaps and Inversions - [离散化+树状数组求逆序数][杭电2018多校赛2]
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=6318 Problem Description Long long ago, there was an ...
- HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- hdu 1394 Minimum Inversion Number (裸树状数组 求逆序数 && 归并排序求逆序数)
题目链接 题意: 给一个n个数的序列a1, a2, ..., an ,这些数的范围是0-n-1, 可以把前面m个数移动到后面去,形成新序列:a1, a2, ..., an-1, an (where m ...
随机推荐
- cocos2dx 编译时间长问题
{ F:\cocos2dx\cocos2d-x-3.7.1\templates\cpp-template-default 彻底解决方式 为把cocos的模版项目编译好(详细是所有生成好并清理Hello ...
- Codeforces Round #272 (Div. 2)C. Dreamoon and Sums 数学推公式
C. Dreamoon and Sums Dreamoon loves summing up something for no reason. One day he obtains two int ...
- Music information retrieval
Music information retrieval - Wikipedia https://en.wikipedia.org/wiki/Music_information_retrieval Mu ...
- luogu2346 四子连棋
题目大意 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双方交替走棋,任意一方可以 ...
- 行政区划代码(SQL版本)2018年8月
表结构:(新建好表字段即可直接copy insert SQL语句) SQL语句: INSERT INTO z_regioncode(regioncode,regionname,pcode) VALUE ...
- maven使用(转载)
一.安装配置: 1.安装配置JDK java/javac -version 2.安装配置maven mvn -v 3.下载项目模板 mvn archetype:generate 二.详 ...
- ios13--购物车优化
// // ViewController.m // 03-综合练习 // #import "ViewController.h" @interface ViewController ...
- Timus 1009. K-based Numbers
1009. K-based Numbers Time limit: 0.5 secondMemory limit: 64 MB Let’s consider K-based numbers, cont ...
- YTU 2769: 结构体--成绩统计
2769: 结构体--成绩统计 时间限制: 1 Sec 内存限制: 128 MB 提交: 1021 解决: 530 题目描述 建立一个简单的学生信息表,包括:姓名.性别.年龄及一门课程的成绩,统计 ...
- 让DIV在屏幕上下左右居中
转自:http://blog.sina.com.cn/s/blog_65d41dff0100v0iz.html 其实解决的思路是这样的:首们需要position:absolute;绝对定位.而层的定位 ...