POJ2299逆序对模板(树状数组)
题目:http://poj.org/problem?id=2299
只能相邻两个交换,所以交换一次只会减少一个逆序对。所以交换次数就是逆序对数。
ps:原来树状数组还可以记录后边lowbit位的部分和。见代码。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define maxn 500005
using namespace std;
int n,f[maxn];
long long tmp[maxn],a[maxn],sum;
void add(int k)
{
while(k)
{
f[k]++;
k-=k&-k;
}
}
int query(int k)
{
int ret=;
while(k<=n)
{
ret+=f[k];
k+=k&-k;
}
return ret;
}
int main()
{
while()
{
sum=;
memset(f,,sizeof f);
scanf("%d",&n);
if(!n)return ;
for(int i=;i<=n;i++)
scanf("%lld",&a[i]),tmp[i]=a[i];
sort(tmp+,tmp+n+);
unique(tmp+,tmp+n+);
for(int i=;i<=n;i++)
a[i]=lower_bound(tmp+,tmp+n+,a[i])-tmp;
for(int i=;i<=n;i++)
{
sum+=query(a[i]);
add(a[i]);
}
printf("%lld\n",sum);
}
}
POJ2299逆序对模板(树状数组)的更多相关文章
- AcWing 107. 超快速排序(归并排序 + 逆序对 or 树状数组)
在这个问题中,您必须分析特定的排序算法----超快速排序. 该算法通过交换两个相邻的序列元素来处理n个不同整数的序列,直到序列按升序排序. 对于输入序列9 1 0 5 4,超快速排序生成输出0 1 4 ...
- P1908 逆序对-(树状数组)
https://www.luogu.org/problem/P1908 比较喜欢线段树,懒得用树状数组(只会套模板,位运算的精髓没有领悟到),一直没有记录树状数组代码,又得捡回来,趁这道题记录一下模板 ...
- 洛谷P1908 逆序对 (树状数组+离散化)
模板题,树状数组加上离散化求逆序对. 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 ...
- 【BZOJ 3295】动态逆序对 - 分块+树状数组
题目描述 给定一个1~n的序列,然后m次删除元素,每次删除之前询问逆序对的个数. 分析:分块+树状数组 (PS:本题的CDQ分治解法见下一篇) 首先将序列分成T块,每一块开一个树状数组,并且先把最初的 ...
- Bzoj 3295: [Cqoi2011]动态逆序对 分块,树状数组,逆序对
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2886 Solved: 924[Submit][Stat ...
- Day2:T4求逆序对(树状数组+归并排序)
T4: 求逆序对 A[I]为前缀和 推导 (A[J]-A[I])/(J-I)>=M A[j]-A[I]>=M(J-I) A[J]-M*J>=A[I]-M*I 设B[]=A[]-M*( ...
- bzoj1831 逆序对 (dp+树状数组)
注意到,所有的-1应该是一个不降的序列,否则不会更优那就先求出来不是-1的的逆序对个数,然后设f[i][j]表示第i个-1放成j的前i个-1带来的最小逆序对数量这个可以树状数组来求 #include& ...
- P3157 [CQOI2011]动态逆序对(树状数组套线段树)
P3157 [CQOI2011]动态逆序对 树状数组套线段树 静态逆序对咋做?树状数组(别管归并QWQ) 然鹅动态的咋做? 我们考虑每次删除一个元素. 减去的就是与这个元素有关的逆序对数,介个可以预处 ...
- hdu 4911 求逆序对数+树状数组
http://acm.hdu.edu.cn/showproblem.php?pid=4911 给定一个序列,有k次机会交换相邻两个位置的数,问说最后序列的逆序对数最少为多少. 实际上每交换一次能且只能 ...
随机推荐
- 使用路径arc-奥运五环
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
- 关于向后台请求数据(get请求,无参数传递),返回html代码(实际需要返回的是json数据)的解决方案
this.$http.get(apis.schoolVideo, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }) 待续
- O(logn)二叉树中的意义----高性能(四)
转载地址:https://zhidao.baidu.com/question/239708227508660244.html?qbl=relate_question_2&word=%CA%B1 ...
- 让个人域名下GithubPage完美支持https
让个人域名下GithubPage完美支持https 欢迎访问完美HTTPS支持的GithubPage个人博客 : https://zggdczfr.cn/ 前言 最近笔记本挂了送去维修,耽误了我的学习 ...
- HDU 1710 二叉树遍历
首先.先序遍历是先访问根节点.然后左节点 然后右节点.从根节点开始 直到它的子节点没有左节点才开始回溯访问上一个节点的右节点.同理.中序遍历 先访问左节点 然后是父节点 然后是右节点.从根节点开始 直 ...
- scrapy-redis(七):部署scrapy
一般我们写好scrapy爬虫,如果需要启动的话,需要进入scrapy项目的根目录,然后运行以下命令: scrapy crawl {spidername} 这样我们就可以在终端查看到爬虫信息了.但爬虫运 ...
- ASP.NET的MVC中Model对象字段的数…
ASP.NET的MVC中Model对象字段的常用数据说明属性: Required——该字段不允许为空. MaxLength——设置数组或字符串最大长度. StringLength——设置字符串最小和最 ...
- Struts2自定义拦截器——完整实例代码
比如一个网上论坛过滤系统,将网友发表的不文明.不和谐的语言,通过拦截器对这些文字进行自动替代. 该项目包含: 1.自定义拦截器(MyInterceptor.java) 2.发表评论的页面(news.j ...
- 面试题13:在O(1)时间删除链表节点
http://blog.csdn.net/jsqfengbao/article/details/47175249
- Hadoop序列化和反序列化
1. 序列化从头说 在面向对象程序设计中,类是个很重要的概念.所谓“类”,可以将它想像成建筑图纸,而对象就是根据图纸盖的大楼.类,规定了对象的一切.根据建筑图纸造房子,盖出来的就是大楼,等同于将 ...