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 ...
随机推荐
- python 开始学习
"人生苦短, 我用python" ---------以此敬意伟大的生产力创造!
- 几张 ejabberd 架构部署图
- ZBar的简单使用
NSRunLoop类声明的编程接口用于管理输入源对象.一个NSRunLoop对象处理像来自窗体系统中的鼠标和键盘事件,NSPORT对象和NSConnection连接对象这类的输入源.一个NSRunLo ...
- Oracle 之 AIO (异步io)
Linux 异步 I/O (AIO)是 Linux 内核中提供的一个增强的功能.它是Linux 2.6 版本内核的一个标准特性,AIO 背后的基本思想是允许进程发起很多 I/O 操作,而不用阻塞或等 ...
- 窗口点击模拟a
[问题描述] 在计算机屏幕上,有N 个窗口.窗口的边界上的点也属于该窗口.窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容.当你用鼠标点击屏幕上一个点的时候,若其在窗口 ...
- (转)jdbc 调用 sql server 的存储过程时“该语句没有返回结果集”的解决方法
本文转载自:http://hedyn.iteye.com/blog/856040 在JDBC中调用SQL Server中的存储过程时出现如下异常: com.microsoft.sqlserver.jd ...
- struts2学习(5)拦截器简介以及例子执行过程
一.拦截器简介: 二.Struts2预定义拦截器&拦截器栈 在执行action之前和之后,拦截器进行了操作: 比如struts-default.xml中就有很多预定义的拦截器: 拦截器栈: ...
- 架构-架构风格:RESTful
ylbtech-架构-架构风格:RESTful 一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层 ...
- node的close
在http.ServerResponse对象的end方法被调用之前,如果连接被中断,将触发http.ServerResponse对象的close事件. var http=require("h ...
- SpringMVC传统风格控制器和基于注解的控制器
SpringMVC的DispatcherServlet 之前说过springMVC是使用Servlet作为控制器,就是这个用于调度的DispatcherServlet了.这个是servlet,可以根据 ...