码迷,mamicode.com
首页 > 其他好文 > 详细

重刷信奥赛一本通日记-2

时间:2020-05-21 00:38:00      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:include   std   逆序   cout   排序   signed   mes   oid   归并排序   

今天是重刷一本通的第二天

今天刷的是第二章的数据排序

这次呢

题有点多

直接放上前两个题的代码罢

T1车厢重组

/*T1车厢重组
这个小水题我们直接用冒泡排序过了罢*/
#include<iostream>
using namespace std;
int main(){
int n,a[n+1]={0},ans;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
if(a[i]<a[j]){
int t=a[i];
a[i]=a[j];
a[j]=t;
ans++;
}
}
}
cout<<ans;
return 0;     
}

T2求逆序对

/*T2求逆序对
归并排序直接上*/
#include<cstdio>
int n,a[100001],c[100001];
unsigned long long ans=0;
void m(int l,int r){
int mid=(l+r)/2,i,j,tmp;
if(l>=r)
return;
m(l,mid);
m(mid+1,r);
tmp=l;
for(i=l,j=mid+1;i<=mid&&j<=r;)
if(a[i]>a[j])
c[tmp++]=a[j++],ans+=mid-i+1;
else c[tmp++]=a[i++];
if(i<=mid)
for(;i<=mid;)
c[tmp++]=a[i++];
if(j<=r)
for(;j<=r;)
c[tmp++]=a[j++];
for(i=l;i<=r;i++)
a[i]=c[i];
}
int main(void){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
m(1,n);
printf("lld",ans);
return 0;
}

 

重刷信奥赛一本通日记-2

标签:include   std   逆序   cout   排序   signed   mes   oid   归并排序   

原文地址:https://www.cnblogs.com/hells/p/12927253.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!