这个是逆序对的裸题哇

归并排序或者树状数组~

树状数组的话需要离散化一下···

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的更多相关文章

  1. 逆序对__归并排序__树状数组 Inversions SGU - 180

    There are N integers (1<=N<=65537) A1, A2,.. AN (0<=Ai<=10^9). You need to find amount o ...

  2. SGU 180 Inversions(离散化 + 线段树求逆序对)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=180 解题报告:一个裸的求逆序对的题,离散化+线段树,也可以用离散化+树状数组.因为 ...

  3. SGU 180 Inversions

    题意:求逆序数对数量. 思路一:暴力,O(N^2),超时. 思路二:虽然Ai很大,但是n比较小,可以离散化,得到每个Ai排序后的位置Wi,然后按照输入的顺序,每个Ai对答案的贡献是Wi-Sum(Wi- ...

  4. SGU 180 Inversions【树状数组】

    题意:求逆序数 和POJ那题求逆序数的一样,不过这题离散化之后,要去一下重,然后要开到long long #include<iostream> #include<cstdio> ...

  5. SGU 180

    求逆序数对    归并排序 #include <cstdio> #include <cstring> #include <cmath> #include <a ...

  6. 今日SGU 5.5

    SGU 114 题意:求一个点到其他点的距离总和最小,距离的定义是x轴距离乘以那个点的人数p 收获:带权中位数,按坐标排序,然后扫一遍,最后权值超过或等于总权值的一半时的那个点就是答案,证明暂无 #i ...

  7. 20160723数据结构节alexandrali

    大坑最后再填. 20160803:心情好回来填啦(5/7) 做的题目是: poj2970 我们先每个人都不给钱qwq 然后我们发现有一位的工作时间超过了d 那么我们就从以前安排过工作的人里,a最大的, ...

  8. SGU 分类

    http://acm.sgu.ru/problemset.php?contest=0&volume=1 101 Domino 欧拉路 102 Coprime 枚举/数学方法 103 Traff ...

  9. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

随机推荐

  1. ORACLE联机日志文件丢失或损坏的处理方法(转)

    经验总结: 联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题. 损坏非当前联机日志:1.启动数据库,遇到ORA-00312 or ORA ...

  2. jsp转向,exception

    jsp要像servlet那样转向时可以得 <jsp:forward page="Counter.jsp"> <jsp:param name="parma ...

  3. bzoj 2535 && bzoj 2109 [Noi2010]Plane 航空管制——贪心

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...

  4. Spring Boot 入门之 Web 篇(二)

    原文地址:Spring Boot 入门之 Web 篇(二) 博客地址:http://www.extlight.com 一.前言 上一篇<Spring Boot 入门之基础篇(一)>介绍了 ...

  5. Oracle存储过程记录异常日志

    一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发.部署,简单.快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知.解决办法也简单,学代码那样去捕获异常.打 ...

  6. 移动端固定头部和固定左边第一列的实现方案(Vue中实现demo)

    最近移动端做一份报表,需要左右滚动时,固定左边部分:上下滚动时,固定头部部分. 代码在Vue中简单实现 主要思路是: a.左边部分滚动,实时修改右边部分的滚动条高度 b.头部和内容部分都设置固定高度, ...

  7. Oracle profile含义、修改、新增

    profiles文件是口令和资源限制的配置集合,包括CPU的时间.I/O的使用.空闲时间.连接时间.并发会话数量.密码策略等对于资源的使用profile可以做到控制会话级别或语句调用级别.oracle ...

  8. 设计模式-访问者(Visitor)模式

    访问者模式是对象的行为模式.访问者模式的目的是封装施加在某种数据结构元素上的操作.一旦一些操作需要修改,接受这个操作的数据结构可以保持不变. 个人觉得访问者模式相对其他的设计模式来说稍微复杂,难理解一 ...

  9. golang的吐槽

    烂到极致的包管理:简单清晰的包管理机制是任何一门语言都需要具备的.后起之秀的golang,在众多成熟的其他语言包管理方式,居然做成这样,简直人间地狱.

  10. oracke创建db link

    -- Create database link create public database link test_link connect to 用户名 identified by 密码 using ...