POJ 2299 求逆序对个数 归并排序 Or数据结构
题意:
求逆序对个数 没有重复数字
线段树实现:
离散化。 单点修改,区间求和
// 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数据结构的更多相关文章
- P1136 超车 归并排序 求逆序对个数
这道题从看到它开始到做出来,已经过了快两周[因为第一次思路完全跑偏写的是暴力模拟想水过]: 题意是这样的: jzabc除了对多米诺骨牌感兴趣外,对赛车也很感兴趣.上个周末他观看了一场赛车比赛.他总是 ...
- Ultra-QuickSort POJ - 2299 (逆序对)
In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a seque ...
- poj 2299 Ultra-QuickSort 逆序对模版题
用树状数组求逆序数 唯一的坑点就是sum要用long long存 直接贴代码了 以后忘了还能直接看 2333…… PS:和hdu3743代码是一样的,因为两个都是逆序对模版题…… #include&l ...
- poj 2299 求逆序数
#include <iostream> ; int a[MAX]; int swap[MAX]; //临时数组 int n; //数组a的长度 __int64 result; //数组a中 ...
- JDOJ 1927 求逆序对
洛谷 P1908 逆序对 洛谷传送门 JDOJ 1927: 求逆序对 JDOJ传送门 题目描述 猫猫TOM和小老鼠JERRY最近又较量上了,但是毕竟都是成年人,他们已经不喜欢再玩那种你追我赶的游戏,现 ...
- 求逆序对[树状数组] jdoj
求逆序对 题目大意:给你一个序列,求逆序对个数. 注释:n<=$10^5$. 此题显然可以跑暴力.想枚举1到n,再求在i的后缀中有多少比i小的,统计答案即可.这显然是$n^2$的.这...显然过 ...
- codevs 4163 求逆序对的数目 -树状数组法
4163 hzwer与逆序对 时间限制: 10 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...
- P1908 逆序对(归并排序)
https://www.luogu.com.cn/problem/P1908 归并排序是用来求逆序对的 归并排序的思想就是分治 #include <bits/stdc++.h> using ...
- 归并排序求逆序对(poj 2299)
归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...
随机推荐
- 安卓代码迁移:Make.exe: *** [***.o]Error 1
描述:NDK开发中显示,windows环境下NDK开发 解决办法:查找系统环境变量,找到关于Cygwin的环境变量或其他无效的环境变量删除处理.
- BZOJ 1146: [CTSC2008]网络管理Network 带修改主席树_树套树_DFS序
Description M公司是一个非常庞大的跨国公司,在许多国家都设有它的下属分支机构或部门.为了让分布在世界各地的N个 部门之间协同工作,公司搭建了一个连接整个公司的通信网络.该网络的结构由N个路 ...
- Day5 练习
1. 2. 要加强对代码效率的思考 3. 4. 知识点:1)多变量的同时赋值 2)元素的不可修改性:(1,2)=(3,4)与(a,b)= (b,a) 联想指针.地址去理解 :可用id()或t ...
- appium的等待
在自动化过程中,元素出现受网络环境,设备性能等多种因素影响.因此元素加载的时间可能不一致,从而会导致元素无法定位超时报错,但是实际上元素是正常加载了的,只是出现时间晚一点而已.那么如何解决这个问题呢? ...
- Google HTML/CSS Style Guide
转自: http://google.github.io/styleguide/htmlcssguide.xml Google HTML/CSS Style Guide Revision 2.23 Ea ...
- 创建对象—从es5到es6
原文地址 本文主要讲述了使用JavaScript创建对象的几种方式,分别是传统的Object构造函数.对象字面量.工厂模式.构造函数模式.原型模式.组合模式,以及es6的class定义类.然后从bab ...
- es5、es6函数调用
ES5中函数的4种调用 在ES5中函数内容的this指向和调用方法有关 1 函数调用模式 包括函数名()和匿名函数调用,this指向window function getSum() { console ...
- Springmvc中ajax与jason应用
Springmvc中ajax与jason应用 相关依赖包 json数据转换的jar包 jackson-annotations-2.5.4 jackson-core-2.5.4 jackson-data ...
- JS控制全屏,监听退出全屏事件
实现方案 //进入全屏 function requestFullScreen(de) { if(de.requestFullscreen){ //W3C de.requestFullscreen(); ...
- canvas实现圆框图片
作者:issac_宝华链接:http://www.jianshu.com/p/9a6ee2648d6f來源:简书 在html中做圆框图片很容易,只需要简单的 border-radius: 50%; 当 ...