题意:
     给你一串数字,然后给你最多进行k次交换(只能交换相邻的)问交换后的最小逆序数是多少。

思路:

     首先要知道的一个就是给你一个序列,每次只能交换相邻的位置,把他交换成一个递增序列所需要的最少步数等于整个序列的逆序数,在转化到这个题目,我们只要求出个逆序数,然后输出逆序数 - k就行了,如果是负数输出0。


#include<stdio.h>
#include<string.h>
#include<algorithm>#define N 100000 + 10

using namespace std;typedef struct
{int num ,id;
}NODE;NODE node[N];__int64 num[N];
int hash[N];
int lowbit(int x)
{return x & -x;
}void update(int x ,__int64 a ,int n)
{for(int i = x ;i <= n ;i += lowbit(i))num[i] += a;
}__int64 find(int x)
{__int64 sum = 0;for(int i = x ;i > 0 ;i -= lowbit(i))sum += num[i];return sum;
}bool camp(NODE a ,NODE b)
{return a.num < b.num;
}int main ()
{int n ,i ,a;__int64 m ,sum;while(~scanf("%d %I64d" ,&n ,&m)){for(i = 1 ;i <= n ;i ++){scanf("%d" ,&node[i].num);node[i].id = i;}sort(node + 1 ,node + n + 1 ,camp);int t = 0;node[0].num = -1;for(i = 1 ;i <= n; i ++){if(node[i].num != node[i-1].num)t ++;                         hash[node[i].id] = t;}memset(num ,0 ,sizeof(num));for(sum = 0 ,i = 1 ;i <= n ;i ++){sum += (i - 1) - find(hash[i]);update(hash[i] ,1 ,t);}if(sum < m) printf("0\n");else printf("%I64d\n" ,sum - m);}return 0;
}

hdu4911 简单树状数组相关推荐

  1. poj 2029 二维树状数组

    思路:简单树状数组 #include<map> #include<set> #include<cmath> #include<queue> #inclu ...

  2. 差分+树状数组 线段树【P2357】 守墓人

    题目描述-->p2357 守墓人 敲了一遍线段树,水过. 树状数组分析 主要思路: 差分 简单介绍一下差分(详细概念太麻烦,看下面. 给定一个数组 7 8 6 5 1 8 18 20 35 // ...

  3. CF56E Domino Principle 树状数组 + 简单dp

    一个比较简单的题,但是我还是没做出来(哭. 很容易想到从后往前做,所以我们可以维护一个dp数组f,f(i)表示到第i个牌倒下能达到的最远距离. f直接倒着跑,每次取[x,x+h−1][x,x+h-1] ...

  4. 树状数组维护区间和的模型及其拓广的简单总结

    by wyl8899 树状数组的基本知识已经被讲到烂了,我就不多说了,下面直接给出基本操作的代码. 假定原数组为a[1..n],树状数组b[1..n],考虑灵活性的需要,代码使用int *a传数组. ...

  5. bzoj2683:简单题(树状数组套CDQ分分治)

    CDQ(陈丹琦)分治 CDQ显然是一个人的名字(2008NOI金牌选手陈丹琦) 这种离线的分治算法在算法界被称为"CDQ分治".  首先回忆一下归并排序的分治, 它的操作是将数组二 ...

  6. 简单の暑假总结——树状数组

    2.1 树状数组 树状数组,顾名思义,长得像树的数组,用于处理一些单点修改以及区间查询的问题.其时间复杂度为 O(log⁡2n)O(\log _2n)O(log2​n) .如过我们使用一些一般的数据结 ...

  7. 7.25 树状数组的简单应用题

    首先我们都了解过树状数组这一短小精悍的利器,知道它和差分以及推公式的简单结合.但很显然问题不会那么裸. 下面我们将讨论两道关于树状数组的简单应用题,看看具体包装下的树状数组题目 一.   楼兰图腾  ...

  8. 洛谷 P5057 [CQOI2006]简单题(树状数组)

    嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...

  9. HDU 2836 Traversal 简单DP + 树状数组

    题意:给你一个序列,问相邻两数高度差绝对值小于等于H的子序列有多少个. dp[i]表示以i为结尾的子序列有多少,易知状态转移方程为:dp[i] = sum( dp[j] ) + 1;( abs( he ...

最新文章

  1. plsql 设置鼠标行执行_Excel中执行“宏”的方法有哪些?我列举了这5个,你会几个...
  2. 采用SIMULINK SimPowerSystems的光伏并网阵列仿真
  3. .net core 文件流保存图片_Java--利用TCP实现文件上传
  4. C++学习之路 | PTA乙级—— 1091 N-自守数 (15 分)(精简)
  5. Spring自学日志03(作用域,自动装配)
  6. 2019杭电多校第九场 Rikka with Cake (hdu6681)
  7. python 抽象类、抽象方法、接口、依赖注入、SOLIP
  8. 计算机图形学基础第七章ppt,第三章 计算机图形学基础ppt课件.ppt
  9. “ISO9001:2015质量管理体系 要求”学习笔记
  10. 04-1下载Win系统(装机助理)
  11. Could not find a version that satisfies the requirement pytz (from django)
  12. 进销存管理系统搭建流程
  13. 如何将PDF转换成jpg图片?教你2种免费方法
  14. java 拉勾网,拉钩网java笔试题分享
  15. 木门锁孔合页综合加工机器
  16. win10出现“以太网没有有效的ip配置”的问题
  17. 光学:薄透镜成像、景深
  18. JS undefined报错
  19. 雨听 | 英语学习笔记(十七)~作文范文:大学生的书单
  20. #1163 : 博弈游戏·Nim游戏(数学博弈)

热门文章

  1. linux--cut命令
  2. iOS 开发笔记 cocoapods 配置遇到的问题
  3. OPatch cannot find a valid oraInst.loc file to locate Central Inventory
  4. myeclipse2014新感悟
  5. 石川es6课程---8、字符串
  6. springboot配置cxf
  7. 记录MNIST采用卷积方式实现与理解
  8. 2018.12.22 spoj7258 Lexicographical Substring Search(后缀自动机)
  9. python编码与存储读取数据(数组字典)
  10. themeleaf跳转锚链接