题意:

求逆序对个数 没有重复数字

线段树实现:

离散化。 单点修改,区间求和

// by SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long ans=0;
int n,t,f[2555555],sum[2555555],a[2555555];
bool cmp(int i,int j){return a[i]<a[j];}
void change(int l,int r,int pos){
if(l==r){sum[pos]=1;return;}
int mid=(l+r)>>1;
if(mid<a[t])change(mid+1,r,pos<<1|1);
else change(l,mid,pos<<1);
sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
int query(int l,int r,int pos){
if(l>a[t]&&r<=n)return sum[pos];
int mid=(l+r)>>1;
if(mid<=a[t])return query(mid+1,r,pos<<1|1);
else return query(mid+1,r,pos<<1|1)+query(l,mid,pos<<1);
}
int main(){
while(scanf("%d",&n)&&n){
ans=0;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)f[i]=i;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
sort(f+1,f+1+n,cmp);
for(int i=1;i<=n;i++)a[f[i]]=i;
for(t=1;t<=n;t++)change(1,n,1),ans+=query(1,n,1);
printf("%lld\n",ans);
}
}

归并排序(掌握得不好,,,,以后还是用segtree吧。。。):

#include <cstdio>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
int n,a[500005],q[500005],ans=0;
void solve(int l,int r){
if(r==l)return;
int mid=(l+r)/2;
solve(l,mid);solve(mid+1,r);
int jy1=l,jy2=mid+1,jy=l;
while(jy1<=mid||jy2<=r){
if(jy2>r ||(jy1<=mid&&a[jy1]<=a[jy2]))q[jy++]=a[jy1++];
else{
if(jy1<=mid) ans+=jy2-jy;
q[jy++]=a[jy2++];
}
}
for(int i=l;i<=r;i++)a[i]=q[i];
}
signed main(){
while(scanf("%lld",&n)&&n){
ans=0;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
solve(1,n);printf("%lld\n",ans);
}
}

POJ 2299 求逆序对个数 归并排序 Or数据结构的更多相关文章

  1. P1136 超车 归并排序 求逆序对个数

    这道题从看到它开始到做出来,已经过了快两周[因为第一次思路完全跑偏写的是暴力模拟想水过]: 题意是这样的:  jzabc除了对多米诺骨牌感兴趣外,对赛车也很感兴趣.上个周末他观看了一场赛车比赛.他总是 ...

  2. Ultra-QuickSort POJ - 2299 (逆序对)

    In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...

  3. poj 2299 Ultra-QuickSort 逆序对模版题

    用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333…… PS:和hdu3743代码是一样的,因为两个都是逆序对模版题…… #include&l ...

  4. poj 2299 求逆序数

    #include <iostream> ; int a[MAX]; int swap[MAX]; //临时数组 int n; //数组a的长度 __int64 result; //数组a中 ...

  5. JDOJ 1927 求逆序对

    洛谷 P1908 逆序对 洛谷传送门 JDOJ 1927: 求逆序对 JDOJ传送门 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现 ...

  6. 求逆序对[树状数组] jdoj

    求逆序对 题目大意:给你一个序列,求逆序对个数. 注释:n<=$10^5$. 此题显然可以跑暴力.想枚举1到n,再求在i的后缀中有多少比i小的,统计答案即可.这显然是$n^2$的.这...显然过 ...

  7. codevs 4163 求逆序对的数目 -树状数组法

    4163 hzwer与逆序对  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...

  8. P1908 逆序对(归并排序)

    https://www.luogu.com.cn/problem/P1908 归并排序是用来求逆序对的 归并排序的思想就是分治 #include <bits/stdc++.h> using ...

  9. 归并排序求逆序对(poj 2299)

    归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...

随机推荐

  1. SLAM:ORB-SLAM 位姿优化描述

    只知道算法描述和代码,而不知道原理是比较扯的事情,还是把原理转载一下. 原文链接: http://www.cnblogs.com/luyb/p/5447497.html ORB-SLAM作为单目SLA ...

  2. php header() 函数用法归纳

    301 永久重定向 <?php header('HTTP/1.1 301 Moved Permanently'); header('Location: http://www.example.co ...

  3. (转) OpenLayers3基础教程——OL3 介绍control

    http://blog.csdn.net/gisshixisheng/article/details/46761535 概述: 本文讲述的是Ol3中的control的介绍和应用. OL2和OL3 co ...

  4. 神奇的splay树

    神奇的splay树 总结 splay树是一种BST,其通过不断的splay操作维持树的平衡:其基本思想是将频率高的点(实际是每次查找的点)通过splay操作旋转到树根 核心操作: update(x): ...

  5. 慕课网页面app的滑动

    #coding=utf-8from appium import webdriver def get_driver(): desc={ "platformName":"An ...

  6. 【剑指Offer】2、替换空格

      题目描述:   请实现一个函数,将一个字符串中的每个空格替换成"%20".例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. ...

  7. 7.5 pragma 指令

    第1个pragma禁用了我们感兴趣的特别警告,第2个恢复了它.禁用尽可能小的一段代码的警告是一个良好的做法,以便你不会错过任何真正应该修复的错误.如果你想在单独一行上禁用或恢复多个警告,那么只需用逗号 ...

  8. vfs:open.c 源码学习

    nameidata路径查找辅助结构 open.c @do_sys_open @get_unused_fd_flags @do_filp_open 1.开始填充nameidata 2.开始填充file ...

  9. 家谱(gen)——洛谷P2814

    #include <iostream> #include <string> #include <map> using namespace std; map < ...

  10. keycode键盘 按键 - 键码 对应表

    字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 ...