+++*树状数组**求逆序数

思路:要求求逆序数的数组排序,排序之后他们的下标将混乱,这时求下标得逆序数,即为原数组的逆序数。 

题目

# include<iostream>
# include<cstdio>
# include<algorithm>
# include<cstring>
const int maxn=500010; 
int n;
long long ans; 

 int a[maxn];

 int t[maxn];
struct  node
{  
  int val;  
  int pos;  
}p[maxn];  
bool cmp(const node&a, const node& b){  
  return a.val<b.val;  
}  
int lowbit(int x){
	return x&(-x);
}
void add(int x){
	while(x<=n){
		t[x]+=1;
		x+=lowbit(x);
	}
}
int sum(int x){
	int ret=0;
	while(x>0){
		ret+=t[x];
		x-=lowbit(x);
	}
	return ret;
}
using namespace std;
int main(){

	while(scanf("%d",&n)){
		if(n==0)
		break;
		memset(a,0,sizeof(a));
		memset(t,0,sizeof(t));
		memset(p,0,sizeof(p));
		for(int i=1; i<=n; i++)
 		 {  
 		   scanf("%d",&p[i].val);  
	  		  p[i].pos=i;  
	  		
 		 }  
		sort(p+1,p+n+1,cmp);     //排序  将要求求逆序数的数组排序,排序之后他们的下标将混乱,这时求下标得逆序数,即为原数组的逆序数。 
		for(int i=1; i<=n; i++)
 		 { 
 		 	a[i]=p[i].pos;
 		 }  
		ans=0;
		for(int i=1;i<=n;i++){
			add(a[i]);
			ans+=i-sum(a[i]);
		}
		printf("%lld\n",ans);
	}
	return 0;
}

阿里云建站—为企业提供互联网“快”服务
2020年因为一场突如其来的疫情,不少企业受到了严重冲击,疫情的冲击力对传统“纯线
下”行业的危害最大,互联网女皇玛丽·米克(MaryMeeker)4月17日发布了著名的年度互
联网趋势报告,报告中指出:拥有强大的互联网线上线下融合能力的企业在疫情中的表现最好,
线上线下融合的趋势已经存在一段时间了,但是疫情让这种需求变得更加的迫切。
如果你的企业完全依附于传统的、纯线下的经验模式,那么在2020年你将“必死无疑”,
一场巨大的,前所未有的互联网革命已经到来!
阿里云建站为了助力各行各业复工复产,疫情期间“马不停蹄”为数以万计的企业快速完成
建站,为他们朝着“线上线下融合”或者“纯线上”的互联网经营模式迈进,打下了坚实的基础。
“云·速成美站”模板建站1天就能上线,不懂技术没关系,打字就能建网站。千套网站模
板免费提供,百元就能建官网,一价全包,无任何隐形消费。
“云·企业官网”定制建站1周就能上线,高端量身定制建站,千元建官网无需自己动手,
建站专家1对1网站策划及设计,专业省心之选。
疫情,是一场大浪淘沙,每一次危机背后都隐藏着机会,危机越大,机会也越大。大环境
已经改变,如果你不努力不去改变来迎合这个大环境,那你必将被淘汰。
阿里云助力企业建站,优惠多多,福利多多,详情请点击如下链接

https://www.aliyun.com/minisite/goods?userCode=tz7kl4ag

猜你喜欢

转载自blog.csdn.net/weixin_44075041/article/details/98481558