hiho一下 第三十九周(逆序数)
2015-03-31 17:32
218 查看
题目连接:点击打开链接
解题思路:
逆序数模板题。注意此题坑点在于数据大,开成unsigned long long
完整代码:
解题思路:
逆序数模板题。注意此题坑点在于数据大,开成unsigned long long
完整代码:
#include <algorithm> #include <iostream> #include <cstring> #include <complex> #include <cstdio> #include <string> #include <cmath> #include <queue> using namespace std; typedef unsigned long long LL; const int MOD = int(1e9)+7; const int INF = 0x3f3f3f3f; const double EPS = 1e-9; const double PI = acos(-1.0); //M_PI; const int maxn = 2000001; int n; LL p[maxn] , t[maxn] , ans; void merge(int first , int last) { int mid = (first + last) / 2; int i1 = 0 , i2 = first , i3 = mid + 1; while(i2 <= mid && i3 <= last) { if(p[i2] > p[i3]) { t[i1 ++] = p[i3 ++]; ans += mid - i2 + 1; } else t[i1 ++] = p[i2 ++]; } while(i2 <= mid) t[i1 ++] = p[i2 ++]; while(i3 <= last) t[i1 ++] = p[i3 ++]; i1 = first; i2 = 0; while(i2 < last - first + 1) p[i1 ++] = t[i2 ++]; } void merge_sort(int first , int last) { if(first < last) { int mid = (last + first) / 2; merge_sort(first , mid); merge_sort(mid + 1 , last); merge(first , last); } } int main() { #ifdef DoubleQ freopen("in.txt","r",stdin); #endif while(cin >> n) { ans = 0; memset(p , 0 , sizeof(p)); memset(t , 0 , sizeof(t)); for(int i = 0 ; i < n ; i ++) { cin >> p[i]; } merge_sort(0 , n - 1); cout << ans << endl; } return 0; }
相关文章推荐
- hiho一下 第三十九周 #1141 : 二分·归并排序之逆序对 【归并排序----树状数组】
- hiho一下 第119周 #1398 : 网络流五·最大权闭合子图 【最小割-最大流--Ford-Fulkerson 与 Dinic 算法】
- (hiho一下第一周)#1032 最长回文子串
- hihoCoder hiho一下 第四十二周:骨牌覆盖问题·二
- hiho一下 第139周 买零食
- hiho一下 第四十九周 -题目1 : 欧拉路·一
- hiho一下 连通性·三 强连通分量
- hiho一下 第五十六周 高斯消元·一(高斯消元解整数方程组)
- hihocoder第57周hiho一下#1196 : 高斯消元·二
- 【区间问题】 hiho一下第152周 - 区间求差
- hiho一下 第155周 任务分配
- hiho一下第一周 最长回文子串
- hiho一下 第六十四周 Right-click Context Menu
- hiho一下 第六十五周
- Trie树的两种实现 - hiho一下
- hiho一下 第162周 回文字符串
- hiho一下第167周数组重排
- hiho一下 第168周 扩展二进制数
- 数组重排 hiho一下第167周
- hiho一下192第192周