博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU4911-Inversion(树状数组)
阅读量:6937 次
发布时间:2019-06-27

本文共 1750 字,大约阅读时间需要 5 分钟。

Inversion

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 914    Accepted Submission(s): 380


Problem Description
bobo has a sequence a
1,a
2,…,a
n. He is allowed to swap two 
adjacent numbers for no more than k times.
Find the minimum number of inversions after his swaps.
Note: The number of inversions is the number of pair (i,j) where 1≤i<j≤n and a
i>a
j.
 

Input
The input consists of several tests. For each tests:
The first line contains 2 integers n,k (1≤n≤10
5,0≤k≤10
9). The second line contains n integers a
1,a
2,…,a
n (0≤a
i≤10
9).
 

Output
For each tests:
A single integer denotes the minimum number of inversions.
 

Sample Input
 
3 1 2 2 1 3 0 2 2 1
 

Sample Output
 
1 2
 
题意:n个数。最多有k次相邻位置的数的交换,问最小的逆序数为多少
思路:保证每次交换逆序数都减小,能够參考冒泡排序的做法。最后仅仅要计算原数列逆序数,然后减掉k就可以。
#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;const int maxn = 100000+10;int sum[maxn];int n,k;int num[maxn],tn[maxn];map
mma;bool cmp(int a,int b){ return a > b;}int lowbit(int x){ return x&(-x);}void add(int x,int d){ while(x < maxn){ sum[x] += d; x += lowbit(x); }}int getS(int x){ int ret = 0; while(x > 0){ ret += sum[x]; x -= lowbit(x); } return ret;}int main(){ while(~scanf("%d%d",&n,&k)){ mma.clear(); memset(sum,0,sizeof sum); for(int i = 1; i <= n; i++){ scanf("%d",&num[i]); tn[i] = num[i]; } sort(tn+1,tn+n+1,cmp); int i = 1,cnt = 1; while(i <= n){ mma[tn[i]] = cnt; int j = i+1; while(j <= n && tn[i]==tn[j]){ j++; } cnt++; i = j; } long long ret = 0; for(int i = 1; i <= n; i++){ ret += getS(mma[num[i]]-1); add(mma[num[i]],1); } long long ans = ret-k; if(ans < 0) ans = 0; cout<
<

转载地址:http://lrpjl.baihongyu.com/

你可能感兴趣的文章
1122
查看>>
Kubernetes入门
查看>>
Centos7.0 修改防火墙为iptables
查看>>
springboot poi
查看>>
数字移交解决方案
查看>>
【数据库】mysql5.6升级5.7(物理方式)
查看>>
微投屏app|微投屏手机版下载
查看>>
Linux磁盘分区三部曲
查看>>
随便写一个
查看>>
云技术、服务能力和落地场景成云视频会议市场的主要竞争方向
查看>>
ActionContext与ServletActionContext的区别及获取request、session等对象
查看>>
ReentrantReadWriteLock(可以重入的读写锁)源码浅析
查看>>
一天一句小贴士:早日告别试用期
查看>>
使用zabbix 2.4 监控mysql----自带模板
查看>>
Linux下多线程程序设计实验
查看>>
项目管理软件Primavera P6简介
查看>>
工作事件五点作法和网络中所产生的Winsock连接与互动
查看>>
mongodb优化
查看>>
resin配置端口和虚拟目录
查看>>
我的友情链接
查看>>