模板——树状数组求逆序对
题目链接:https://www.luogu.org/problemnew/show/P1908
1 #include <map> 2 #include <set> 3 #include <cmath> 4 #include <queue> 5 #include <string> 6 #include <cstdio> 7 #include <cstring> 8 #include <iostream> 9 #include <algorithm> 10 #define forn(i, n) for (int i = 0; i < (n); i++) 11 #define forab(i, a, b) for (int i = (a); i <= (b); i++) 12 #define forba(i, b, a) for (int i = (b); i >= (a); i--) 13 #define mset(a, n) memset(a, n, sizeof(a)) 14 #define fast ios::sync_with_stdio(0), cin.tie(0), cout.tie(0) 15 #define P pair<int,int> 16 #define fi first 17 #define se second 18 using namespace std; 19 #define N 500005 20 #define maxn 1005 21 #define inf 0x3f3f3f3f 22 #define ll long long 23 ll a[N], c[N * 4]; 24 ll b[N]; 25 int n; 26 int sum; 27 inline int lowbit(int x) { return x & (-x); } 28 void add(int x,int y) 29 { 30 for (; x <= N;x+=lowbit(x)) 31 c[x] += y; 32 } 33 int ask(int x) 34 { 35 int ans = 0; 36 for (; x;x-=lowbit(x)) 37 ans += c[x]; 38 return ans; 39 } 40 bool cmp(int x,int y) 41 { 42 return b[x] > b[y]; 43 } 44 int main() 45 { 46 scanf("%d", &n); 47 forab(i, 1, n) 48 { 49 scanf("%d", b + i); 50 a[i] = i; 51 } 52 sort(a + 1, a + 1 + n, cmp); 53 // forab(i, 1, n) cout << a[i] << " "; 54 // cout << endl; 55 forab(i, 1, n) 56 { 57 58 // cout << "sum=" << sum << endl; 59 add(a[i], 1); 60 sum += ask(a[i] - 1); 61 } 62 cout << sum << endl; 63 system("pause"); 64 } 65 /* 66 6 67 5 4 2 6 3 1 68 69 */
View Code
转载于:https://www.cnblogs.com/zssst/p/11120988.html
模板——树状数组求逆序对相关推荐
- 牛客练习赛33 D tokitsukaze and Inverse Number (树状数组求逆序对,结论)
链接:https://ac.nowcoder.com/acm/contest/308/D 来源:牛客网 tokitsukaze and Inverse Number 时间限制:C/C++ 1秒,其他语 ...
- loj #535. 「LibreOJ Round #6」花火 树状数组求逆序对+主席树二维数点+整体二分...
$ \color{#0066ff}{ 题目描述 }$ 「Hanabi, hanabi--」 一听说祭典上没有烟火,Karen 一脸沮丧. 「有的哦-- 虽然比不上大型烟花就是了.」 还好 Shinob ...
- Tido 习题-二叉树-树状数组求逆序对
这里给大家提供一个全新的求逆序对的方法 是通过树状数组来实现的 题目描述 样例输入 Copy 5 2 3 1 5 4 样例输出 Copy 3 提示 #include<iostre ...
- 树状数组求逆序对_区间和的个数(树状数组)
327. 区间和的个数 给定一个整数数组 nums,返回区间和在 [lower, upper] 之间的个数,包含 lower 和 upper. 区间和 S(i, j) 表示在 nums 中,位置从 i ...
- 牛客 - What Goes Up Must Come Down(树状数组求逆序对)
题目链接:点击查看 题目大意:给出一个长度为 n 的序列,每次操作可以交换相邻两个数字的位置,现在问最小进行多少次操作,可以使得序列的相对大小呈山峰状(中间高两边低,或非严格递增或非严格递减) 题目分 ...
- 【Luogu1908】逆序对(离散化,树状数组求逆序对)
problem 给你一个长为n的序列A[] 求该序列的逆序对个数 solution 用b[i]保存下标i在A中出现的次数,那么数组b[i]在[l,r]上的区间和,就表示序列A在范围[l,r]内的有多少 ...
- 树状数组 求 逆序对
如何统计第i个数与1-第i - 1个数构成多少个逆序对呢? 考虑根据值来建树状数组,初始树状数组为全0,先按序列从左到右将数据的值对应的位置的数加一,代表又有一个数出现.因此,在循环到第i项时,前i- ...
- 树状数组求逆序对_初识树状数组
树状数组是用来解决数列多次单点修改和前缀和查询的利器. 首先我们来看问题的原型: 已知一个长度为n(n<=10 0000)的数列,初始值都是零,现在我们要对数列施加两种类型的操作共q(q< ...
- 树状数组求逆序对_算法系列之-数组中的逆序对
题目来源 剑指offer 01 题目描述 在数组中如果前一个数字大于后一个数字,则称为这个数字组合组成一个逆序对.输入一个数组,求所有的逆序对的总数. 如 数组 {7,5,6,4} 则它的逆序对是 ( ...
最新文章
- 怎么实现事务_你可能知道事务的四大特性,但是不一定知道“事务的实现原理”...
- MySQL Merge引擎实现分表
- R 笔记 prophet
- 【JS第1期】深拷贝实现原理
- 二项式在matlab中的应用
- [置顶] jQuery旋转插件—rotate
- 一位38岁的老码农在退休前和年轻码农们的互动
- Sqlmap 常用命令
- 引导滤波器联合上采样代码
- CANoe CAPL文件操作目录合集
- 模型的参数verbose用法详解
- 外卖小程序源码java后台_扫码点餐系统小程序源码搭建开发
- 墨者学院Tomcat 远程代码执行漏洞利用
- HTML元素的水平/垂直居中方式(简单代码和图)
- 首个实时全球空中交通监控系统在北大西洋上空全面投入运行和试用
- linux网络引流工具,gor 引流快速入门
- Latex完成入侵检测系统综述论文
- 探讨IT人的创业方向
- 应用和产业齐步走(转)
- 局域网安全防护技术(内网)