hdu5497 Inversion 树状数组 待补完!!!
来源:互联网 发布:重庆开票软件金税盘版 编辑:程序博客网 时间:2024/05/19 15:43
Inversion
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1174 Accepted Submission(s): 351
Problem Description
You have a sequence {a1,a2,...,an} and you can delete a contiguous subsequence of length m . So what is the minimum number of inversions after the deletion.
Input
There are multiple test cases. The first line of input contains an integer T , indicating the number of test cases. For each test case:
The first line contains two integersn,m(1≤n≤105,1≤m<n) - the length of the seuqence. The second line contains n integers a1,a2,...,an(1≤ai≤n) .
The sum ofn in the test cases will not exceed 2×106 .
The first line contains two integers
The sum of
Output
For each test case, output the minimum number of inversions.
Sample Input
23 11 2 34 24 1 3 2
Sample Output
01
Source
BestCoder Round #58 (div.2)
半年前的问题一直困然至今。。
题意:一个数组,你可以从中删除连续的k个数,求一个最优的方案使得操作后的数组内逆序数对最少。
学长讲过这个,但是暑假的我还是在无限wa。。。枚举删除连续k个数的起点,每次
啊啊啊回头在写。。。。
待补完
/* ━━━━━┒ ┓┏┓┏┓┃μ'sic foever!! ┛┗┛┗┛┃\○/ ┓┏┓┏┓┃ / ┛┗┛┗┛┃ノ) ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┛┗┛┗┛┃ ┓┏┓┏┓┃ ┃┃┃┃┃┃ ┻┻┻┻┻┻ */#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <cmath>#include <map>#include <stack>#include <vector>using namespace std;const int maxn=1e5;int save[maxn+5];int before[maxn+5];int after[maxn+5];int n;int lowbit(int x){ return x&(-x);}void update(int x,int val,bool type){ if(type){ while(x<=maxn){ before[x] += val; x += lowbit(x); } }else{ while(x<=maxn){ after[x] += val; x += lowbit(x); } }}int getsum(int x,bool type){ int sum=0; if(type){ while(x){ sum += before[x]; x -=lowbit(x); } }else{ while(x){ sum += after[x]; x -=lowbit(x); } } return sum;}int main(){ int t; scanf("%d",&t); int m,i; while(t--){ memset(before, 0, sizeof(before)); memset(after, 0, sizeof(after)); scanf("%d%d",&n,&m); long long ans=0; for(i=1;i<=n;i++){ scanf("%d",&save[i]); } for(i=m+1;i<=n;i++){ ans += i-m-1-getsum(save[i],false); update(save[i], 1, false); } long long now=ans; for(i=1;i<=n-m;i++){ now -= getsum(save[i+m]-1,false); now -= getsum(save[n], true) - getsum(save[i+m], true); update(save[i+m], -1, false); now += getsum(save[i]-1, false); now += getsum(save[n], true) - getsum(save[i],true); update(save[i], 1, true); ans = min(ans,now); } printf("%lld\n",ans); } return 0;}
0 0
- hdu5497 Inversion 树状数组 待补完!!!
- hdu5497(树状数组模板)
- bestcoder#58 Inversion 即 hdu5497 (树状数组维护逆序数)
- hdu5497 Inversion
- HDU4911-Inversion(树状数组)
- HDU1394Minimum Inversion Number(树状数组)
- Minimum Inversion Number [树状数组]
- hdu 5497 Inversion(树状数组)
- Minimum Inversion Number 树状数组
- HDU 1394 Minimum Inversion Number 树状数组
- hdu1394 Minimum Inversion Number 树状数组
- hdu 1394 Minimum Inversion Number (树状数组)
- HDU 1394 Minimum Inversion Number(树状数组)
- HDU-1394 Minimum Inversion Number 树状数组
- HDU 1394 Minimum Inversion Number 树状数组
- 【树状数组】 HDOJ 1394 Minimum Inversion Number
- HDU 1394 Minimum Inversion Number 树状数组
- HDU 1394 Minimum Inversion Number(树状数组)
- 前序遍历和中序遍历 重建树
- js高级程序设计笔记4--函数表达式及闭包
- 返回一个List里的全部排列
- mac root用户没有权限
- EDIT操作
- hdu5497 Inversion 树状数组 待补完!!!
- 梯度下降法详解
- 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法
- <c:catch>标签的使用
- [pyQt_Error]QObject::killTimer: timers cannot be stopped from another thread
- 洛谷P1162 填涂颜色
- 485. Max Consecutive Ones
- DQL、DML、DDL、DCL的概念与区别
- 欢迎使用CSDN-markdown编辑器