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

Posted hells

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重刷信奥赛一本通日记-2相关的知识,希望对你有一定的参考价值。

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

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

这次呢

题有点多

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

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的主要内容,如果未能解决你的问题,请参考以下文章

信息学奥赛一本通要多少钱

信息学奥赛一本通为啥不通过

长春市哪里有卖这本信息学奥赛一本通c++的书店?

信息学奥赛一本通第三部分_队列 ex2_3produce 产生数

樱花(信息学奥赛一本通 1624)

LibreOJ刷题计划 &《信息学奥赛一本通》提高版题目