Inversions SGU - 180
这个是逆序对的裸题哇
归并排序或者树状数组~
树状数组的话需要离散化一下···
emm确实很水很水很水···
归并排序:
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <iostream> using namespace std;
const int maxn=+;
int a[maxn];
int n;
int t[maxn];
long long ans;
void merge(int L,int R,int *A,int *T){
int mid=L+(R-L)/;
if(R-L==)return ;
merge(L,mid,A,T);
merge(mid,R,A,T);
int i=L,j=mid;
int pos=L;
while(i<mid||j<R){
if((A[i]<=A[j]&&i<mid)||j>=R){
T[pos++]=A[i++];
}
else{
T[pos++]=A[j++];
ans+=mid-i;
}
}
for(i=L;i<R;i++)A[i]=T[i];
}
int main(){
ans=;
scanf("%d",&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
merge(,n+,a,t);
cout<<ans;
//for(int i=1;i<=n;i++)
// cout<<a[i]<<" "; return ;
}
树状数组:
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring> using namespace std;
const int maxn=+;
int a[maxn];
int m[maxn];
int n;
int C[maxn];
int lowbit(int x){
return x&(-x);
}
void add(int v,int x){//a[v]+=x
while(v<=n){
C[v]+=x;
v+=lowbit(v);
}
}
int query(int v){//sum[v]
int res=;
while(v>=){
res+=C[v];
v-=lowbit(v);
}
return res;
}
int Max=-;
int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){scanf("%d",&a[i]);}
for(int i=;i<=n;i++)m[i]=a[i];
sort(m+,m++n); long long ans=;
for(int i=;i<=n;i++){
int num=lower_bound(m+,m++n,a[i])-m;
add(num,);
ans+=query(n)-query(num);
}
cout<<ans;
return ;
}
Inversions SGU - 180的更多相关文章
- 逆序对__归并排序__树状数组 Inversions SGU - 180
There are N integers (1<=N<=65537) A1, A2,.. AN (0<=Ai<=10^9). You need to find amount o ...
- SGU 180 Inversions(离散化 + 线段树求逆序对)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...
- SGU 180 Inversions
题意:求逆序数对数量. 思路一:暴力,O(N^2),超时. 思路二:虽然Ai很大,但是n比较小,可以离散化,得到每个Ai排序后的位置Wi,然后按照输入的顺序,每个Ai对答案的贡献是Wi-Sum(Wi- ...
- SGU 180 Inversions【树状数组】
题意:求逆序数 和POJ那题求逆序数的一样,不过这题离散化之后,要去一下重,然后要开到long long #include<iostream> #include<cstdio> ...
- SGU 180
求逆序数对 归并排序 #include <cstdio> #include <cstring> #include <cmath> #include <a ...
- 今日SGU 5.5
SGU 114 题意:求一个点到其他点的距离总和最小,距离的定义是x轴距离乘以那个点的人数p 收获:带权中位数,按坐标排序,然后扫一遍,最后权值超过或等于总权值的一半时的那个点就是答案,证明暂无 #i ...
- 20160723数据结构节alexandrali
大坑最后再填. 20160803:心情好回来填啦(5/7) 做的题目是: poj2970 我们先每个人都不给钱qwq 然后我们发现有一位的工作时间超过了d 那么我们就从以前安排过工作的人里,a最大的, ...
- SGU 分类
http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...
- SGU Volume 1
SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...
随机推荐
- container-diff 谷歌开源镜像分析工具使用
1. 安装 curl -LO https://storage.googleapis.com/container-diff/latest/container-diff-linux-amd64 & ...
- 国外牛人的五个Kubernetes学习建议
现在云中存在的许多系统都是建立在基于虚拟机,虚拟磁盘等物理概念的抽象基础之上的,”Heptio的联合创始人兼首席技术官兼Kubernetes在Google的原始开发人员之一的Joe Beda说. “K ...
- IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件
IMP-00013: only a DBA can import a file exported by another DBA 处理方法:在给目标环境的用户赋予dba权限,或者细粒度一些,赋予imp_ ...
- Avro和Thrift区别(未完待续)
两者都是优秀的序列化框架: Avro创造之初是Hadoop之父Doug为了创造一种更加快捷的序列化方案(此时已经有了thrift),用于Hadoop的HDFS的文件序列化问题. Thrift一个成熟的 ...
- Java堆栈解析
1.RAM和ROM区别RAM-RamdomAccessMemory随机存取存储器(断电后数据会丢失),高速存取,读写时间相等,且与地址无关,如计算机内存等. ROM-Read Only Memory只 ...
- POJ 2566 Bound Found(尺取法,前缀和)
Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 5207 Accepted: 1667 Spe ...
- .NET单点登录实现方法----两种
第一种模式:同一顶级域名下cookie共享,代码如下 HttpCookie cookies = new HttpCookie("Token"); cookies.Expires = ...
- 项目中Map端内存占用的分析
最近在项目中开展重构活动,对Map端内存尽量要省一些,当前的系统中Map端内存最高占用大概3G左右(设置成2G时会导致Java Heap OOM).虽然个人觉得占用不算多,但是显然这样的结果想要试 ...
- 第四章 Kubernetes 架构
4.1 Master节点:Master是大脑,运行如下Daemon服务: API Server(kube-apiserver) API server提供了HTTP/HTTPS RESTful ...
- Asp.net 的cookie问题
写代码的发现的小问题 如果写入cookie的时候指定了domin域名 那么删除的时候必须也指定domin域名才行,即使你先读取了这个已经存在的cookie,但是还是要指定domin才能删除 /// & ...