我好咸鱼。

归并排序之前写过,树状数组就是维护从后往前插入,找比现在插入的数大的数的数量。

如果值域大,可以离散化

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <algorithm>
  4. using namespace std;
  5. const int N=100005;
  6. int a[N],c[N],cnt,t[N],n,ans;
  7. void modify(int x) {
  8. for(int i=x; i<=n; i+=i&-i)
  9. t[i]++;
  10. }
  11. int ask(int x) {
  12. int res=0;
  13. for(int i=x; i; i-=i&-i)
  14. res+=t[i];
  15. return res;
  16. }
  17. int main() {
  18. scanf("%d",&n);
  19. for(int i=1; i<=n; i++) scanf("%d",&a[i]),c[i]=a[i];
  20. sort(c+1,c+1+n);
  21. int u=unique(c+1,c+1+n)-c-1;
  22. for(int i=n; i>=1; i--) {
  23. a[i]=lower_bound(c+1,c+1+u,a[i])-c;
  24. ans+=ask(a[i]);modify(a[i]);
  25. }
  26. printf("%d",ans);
  27. }

归并排序求

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. using namespace std;
  5. int n,a[50005],b[50005];
  6. int merge(int l,int r) {
  7. int ans=0;
  8. if(l>=r) return 0;
  9. int mid=l+r>>1;
  10. ans+=merge(l,mid),ans+=merge(mid+1,r);
  11. int i=l,j=mid+1,k=0,cnt=0;
  12. while(i<=mid&&j<=r) {
  13. if(a[i]<=a[j]) b[k++]=a[i++];
  14. else cnt+=mid-i+1,b[k++]=a[j++];
  15. }
  16. while(j<=r) b[k++]=a[j++];
  17. while(i<=mid) b[k++]=a[i++];
  18. for(k=0;k<r-l+1;k++) {
  19. a[l+k]=b[k];
  20. }
  21. return cnt+ans;
  22. }
  23. int main() {
  24. scanf("%d",&n);
  25. for(int i=1;i<=n;i++) scanf("%d",&a[i]);
  26. cout<<merge(1,n);
  27. }

树状数组||归并排序求逆序对+离散化 nlogn的更多相关文章

  1. POJ 3067 - Japan - [归并排序/树状数组(BIT)求逆序对]

    Time Limit: 1000MS Memory Limit: 65536K Description Japan plans to welcome the ACM ICPC World Finals ...

  2. 【BZOJ3295】【块状链表+树状数组】动态逆序对

    Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计 ...

  3. Day2:T4求逆序对(树状数组+归并排序)

    T4: 求逆序对 A[I]为前缀和 推导 (A[J]-A[I])/(J-I)>=M A[j]-A[I]>=M(J-I) A[J]-M*J>=A[I]-M*I 设B[]=A[]-M*( ...

  4. 【BZOJ4769】超级贞鱼 归并排序求逆序对

    [BZOJ4769]超级贞鱼 Description 马达加斯加贞鱼是一种神奇的双脚贞鱼,它们把自己的智慧写在脚上——每只贞鱼的左脚和右脚上各有一个数.有一天,K只贞鱼兴致来潮,排成一列,从左到右第i ...

  5. POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化)

    POJ.2299 Ultra-QuickSort (线段树 单点更新 区间求和 逆序对 离散化) 题意分析 前置技能 线段树求逆序对 离散化 线段树求逆序对已经说过了,具体方法请看这里 离散化 有些数 ...

  6. 归并排序求逆序对(poj 2299)

    归并排序求逆序对 题目大意 给你多个序列,让你求出每个序列中逆序对的数量. 输入:每组数据以一个数 n 开头,以下n行,每行一个数字,代表这个序列: 输出:对于输出对应该组数据的逆序对的数量: 顺便在 ...

  7. 归并排序&&归并排序求逆序对

    归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序列合并,得到完全有序的序 ...

  8. 归并排序+归并排序求逆序对(例题P1908)

    归并排序(merge sort) 顾名思义,这是一种排序算法,时间复杂度为O(nlogn),时间复杂度上和快排一样 归并排序是分治思想的应用,我们先将n个数不断地二分,最后得到n个长度为1的区间,显然 ...

  9. 2014 HDU多校弟五场A题 【归并排序求逆序对】

    这题是2Y,第一次WA贡献给了没有long long 的答案QAQ 题意不难理解,解题方法不难. 先用归并排序求出原串中逆序对的个数然后拿来减去k即可,如果答案小于0,则取0 学习了归并排序求逆序对的 ...

随机推荐

  1. Spring Boot实例Hello World Demo

    Spring Boot要求Maven的版本达到3.2或以上. 实例: POM: <project xmlns="http://maven.apache.org/POM/4.0.0&qu ...

  2. linux 7.2 下安装maven

    由于现有项目采用maven打包所以需要安装maven 1.创建目录 mkdir /maven cd /maven 2.下载解压maven,这里选择maven版本为3.5.3 wget http://m ...

  3. spring boot下接口调用失败重试方案

    背景: 在项目开发中,有时候会出现接口调用失败,本身调用又是异步的,如果是因为一些网络问题请求超时,总想可以重试几次把任务处理掉. 一些RPC框架,比如dubbo都是有重试机制的,但是并不是每一个项目 ...

  4. springmvc and maven

    使用Maven构建Spring MVC项目的简单示例 标签: mavenspringmvcspring 2013-09-29 12:40 42823人阅读 评论(8) 收藏 举报  分类: Maven ...

  5. QT4.86写中文XML

    网上都语焉不详.举例XML使用的时候,全部都是英文内容,当然不会失败了.尤其我还以VS2008编译,编译器的Character Set就有三种设置,配上QTextCodec::setCodecForC ...

  6. Windows 10彻底关闭自动更新

    关键点:把流量计费开启.

  7. Spring生态简介

    目录 概述 项目说明 主要项目 社区项目 保留项目 最后总结 概述 做Java开发的人一提起Spring,首先在脑海中浮现出的就是"IoC","AOP",&qu ...

  8. vim下的autocmd

    AUTOCMD *autocmd.txt* For Vim version 6.2. 最后修改: 2003年3月28日 VIM 参考手册 作者:Bram Moolenaar 翻译:Zimin<c ...

  9. Gitlab 维护措施

    Gitlab 升级: https://jingyan.baidu.com/article/72ee561ab1b333e16038df63.html Gitlab Rpm包地址: https://pa ...

  10. MongoDB 博客截图之一

    来源:十天掌握MongoDB之三:学会Find - 学吧网 - 专注于PHP资源分享