HDU 2838 (DP+树状数组维护带权排序)

时间:2021-02-19 03:14:28

Reference: http://blog.csdn.net/me4546/article/details/6333225

题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2838

题目大意:每头牛有个愤怒值,每次交换相邻两个数进行升序排序,$cost=val_{1}+val_{2}$,求$\min \sum cost_{i}$

解题思路

按输入顺序DP:

第i的值val的最小cost=当前数的逆序数个数*val+当前数的逆序数和

相当于每次只把这个val同逆序的数做交换,$\sum val_{1}=rev*val$ , $\sum val_{2}=\sum rev$

无后效性原则体现在,当前计算的cost只于前面的数有关,而且对顺序没有影响(逆序数随你怎么排了)

求逆序数个数和逆序数和都可以通过树状数组在$O(logn)$内完成

维护逆序数个数

树状数组对于每个val,$update(val,1)$,即每个val点的值是1

这样$rev=i-getIndex(val)$

原理是,树状数组是按从小到大维护的,输入顺序i(从1开始)-前面数个数(包含自身)=本来应该在后面,却跑到前面数的个数

维护逆序数和

本题的一个trick就是val不可重,所以$update(val,val)$ ,即每个val点的值是val

这样$\sum=getSum(n)-getSum(val)$,即整个序列已经更新的值和(i~n此时都是0)-当前值前面的和=逆序数和

代码

#include "cstdio"
#include "map"
#include "cstring"
#include "algorithm"
using namespace std;
#define LL long long
#define maxn 100005
LL sum[maxn],index[maxn];
int val,n;
int lowbit(int x) {return x&(-x);}
LL getSum(int x)
{
LL ret=;
while(x>)
{
ret+=sum[x];
x-=lowbit(x);
}
return ret;
}
LL getIndex(int x)
{
LL ret=;
while(x>)
{
ret+=index[x];
x-=lowbit(x);
}
return ret;
}
void update(int x,int s,int idx)
{
while(x<=n)
{
sum[x]+=s;
index[x]+=idx;
x+=lowbit(x);
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)!=EOF)
{
memset(sum,,sizeof(sum));
memset(index,,sizeof(index));
LL ans=;
for(int i=;i<=n;i++)
{
scanf("%d",&val);
update(val,val,);
LL rev=i-getIndex(val);
if(rev==) continue;
LL sum=getSum(n)-getSum(val);
ans+=(rev*val+sum);
}
printf("%I64d\n",ans);
}
}

HDU 2838 (DP+树状数组维护带权排序)的更多相关文章

  1. &lbrack;poj3378&rsqb; Crazy Thairs &lpar;DP &plus; 树状数组维护 &plus; 高精度&rpar;

    树状数组维护DP + 高精度 Description These days, Sempr is crazed on one problem named Crazy Thair. Given N (1 ...

  2. P1020 导弹拦截 dp 树状数组维护最长升序列

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  3. HDU 2838 (树状数组求逆序数)

    题意: 给你N个排列不规则的数(1~N),任务是把它从小到大排好,每次仅仅能交换相邻两个数,交换一次的代价为两数之和.求最小代价 思路:对于当前数X.我们如果知道前面比它大的数有多少,如果为K,那么有 ...

  4. CodeForces 1058 F Putting Boxes Together 树状数组,带权中位数

    Putting Boxes Together 题意: 现在有n个物品,第i个物品他的位置在a[i],他的重量为w[i].每一个物品移动一步的代价为他的w[i].目前有2种操作: 1. x y 将第x的 ...

  5. HDU 5869 Different GCD Subarray Query &lpar;GCD种类预处理&plus;树状数组维护&rpar;

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类. 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gc ...

  6. 树形DP&plus;树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  7. HDU 5489 Removed Interval DP 树状数组

    题意: 给一个长度为\(N\)的序列,要删除一段长为\(L\)的连续子序列,问所能得到的最长的\(LIS\)的长度. 分析: 设\(f(i)\)表示以\(a_i\)结尾的\(LIS\)的长度,设\(g ...

  8. 2018中国大学生程序设计竞赛 - 网络选拔赛 1010 YJJ&&num;39&semi;s Salesman 【离散化&plus;树状数组维护区间最大值】

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6447 YJJ's Salesman Time Limit: 4000/2000 MS (Java/O ...

  9. bzoj 3594&colon; &lbrack;Scoi2014&rsqb;方伯伯的玉米田 dp树状数组优化

    3594: [Scoi2014]方伯伯的玉米田 Time Limit: 60 Sec  Memory Limit: 128 MBSubmit: 314  Solved: 132[Submit][Sta ...

随机推荐

  1. 定制centos安装iso

    参考 https://gist.github.com/pauljeff/4b9ad551cb6c35870d7c https://www.redhat.com/archives/kickstart-l ...

  2. tp框架中表单数据的接收

    在thinkphp框架中,接收传过来的表单数据.如果一个一个处理,当数据多时,不显示.也可以用循环.最好的是使用create函数,接受所有的数据.代码行大大减少.很方便.

  3. BFS 模板

    转自:欣哥 下面是bfs一般的形式,谈不上模板但一般都这么来做有点乱有什么多交流 bfs一般用于求最短时间 #include<stdio.h>#include<queue>us ...

  4. python流程控制语句 ifelse - 1

    考点:条件判断语句if-elif 代码: #! /usr/bin/python print ('\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n') p ...

  5. Unit of Work

    ABP使用及框架解析系列 - [Unit of Work part.2-框架实现]   前言 ABP ABP是“ASP.NET Boilerplate Project”的简称. ABP的官方网站:ht ...

  6. VS Code中编写C

    Visual Studio Code如何编写运行C.C++? Visual Studio Code的C/C++扩展功能 vscode配置C/C++的编译调试环境

  7. 虚拟机Ubuntu图形界面进入命令行快捷键

    ctrl+alt+f2 https://jingyan.baidu.com/article/03b2f78c69e5c25ea337ae40.html https://www.zabbix.com/d ...

  8. Python开发——解释器安装

    Python(解释器)安装 Windows 1.Python(解释器)下载链接 2.选择好安装路径,点击安装即可 3.环境变量配置 [右键计算机]-->[属性]-->[高级系统设置]--& ...

  9. 关于python调用zabbix api接口

    因公司业务需要,引进了自动化运维,所用到的监控平台为zbbix3.2,最近正在学习python,计划使用python调用zabbix api接口去做些事情,如生成报表,我想最基本的是要取得zabbix ...

  10. Kotlin中的object 与companion object的区别

    之前写了一篇Kotlin中常量和静态方法的文章,最近有人提出一个问题,在companion object中调用外部的成员变量会调用不到,这才意识到问题,本篇文章会带着这个疑问来解决问题. 一. obj ...