BZOJ 3192 删除物品(树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=3192
题意:(1)一共有N个物品,堆成M堆。
(2)所有物品都是一样的,但是它们有不同的优先级。
(3)你只能够移动某堆中位于顶端的物品。
(4)你可以把任意一堆中位于顶端的物品移动到其它某堆的顶端。若此物品是当前所有物品中优先级最高的,可以直接将之删除而不用移动。
(5)求出将所有物品删除所需的最小步数。删除操作不计入步数之中。
(6)这是一个比较难解决的问题,这里你只需要解决一个比较简单的版本: 不会有两个物品有着相同的优先级,且M=2。
思路:将两堆放在一起,设分界点为mid。由于删除时只能按照编号降序依次删除,则首先将数字排序并记录数字的位置。从大到小删除。根据每个数字的位置计算删除每个数字的移动次数。
struct node
{
int x,id;
};
node a[N];
int n,b[N],n1,n2;
void add(int x)
{
while(x<N) b[x]++,x+=x&-x;
}
int get(int x)
{
int ans=0;
while(x) ans+=b[x],x-=x&-x;
return ans;
}
int cmp(node a,node b)
{
return a.x<b.x;
}
int main()
{
RD(n1,n2);
int i;
for(i=n1;i>=1;i--) RD(a[i].x);
for(i=n1+1;i<=n1+n2;i++) RD(a[i].x);
n=n1+n2;
FOR1(i,n) a[i].id=i;
sort(a+1,a+n+1,cmp);
i64 ans=0;
int mid=n1,x;
for(i=n;i>=1;i--)
{
x=a[i].id;
if(x<=mid)
{
ans+=mid-x-(get(mid)-get(x));
mid=x;
add(x);
}
else
{
ans+=x-1-mid-(get(x-1)-get(mid));
mid=x-1;
add(x);
}
}
PR(ans);
}
BZOJ 3192 删除物品(树状数组)的更多相关文章
- [JLOI2013]删除物品 树状数组
当时考试时间剩下太短了然后就挂掉了..其实是个简单的数据结构. 话说一看最小还以为是动规呢.. 将两堆头对头排.比如样例就是 541|273 因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个 ...
- [bzoj3192][JLOI2013]删除物品(树状数组)
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 508[Submit][Status ...
- bzoj 3192 删除物品
Written with StackEdit. Description 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优 ...
- Bzoj 2789: [Poi2012]Letters 树状数组,逆序对
2789: [Poi2012]Letters Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 278 Solved: 185[Submit][Stat ...
- BZOJ 4361 isn | DP 树状数组
链接 BZOJ 4361 题面 给出一个长度为n的序列A(A1,A2...AN).如果序列A不是非降的,你必须从中删去一个数, 这一操作,直到A非降为止.求有多少种不同的操作方案,答案模10^9+7. ...
- BZOJ.1901.Dynamic Rankings(树状数组套主席树(动态主席树))
题目链接 BZOJ 洛谷 区间第k小,我们可以想到主席树.然而这是静态的,怎么支持修改? 静态的主席树是利用前缀和+差分来求解的,那么对于每个位置上的每棵树看做一个点,拿树状数组更新. 还是树状数组的 ...
- bzoj 2434 AC自动机+树状数组
2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 3493 Solved: 1909[Submit][Sta ...
- BZOJ 2727 双十字(树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2727 题意: 思路:思路来自这里.首先对于每个位置(i,j)用C[i][j]表示该位置同 ...
- BZOJ 3333 排队计划 树状数组+线段树
题目大意:给定一个序列.每次选择一个位置,把这个位置之后全部小于等于这个数的数抽出来,排序,再插回去,求每次操作后的逆序对数 首先我们每一次操作 对于这个位置前面的数 因为排序的数与前面的数位置关系不 ...
- BZOJ.4361.isn(DP 树状数组 容斥)
题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...
随机推荐
- bzoj 3295 树套树
比较裸,可以有好多的优化,比如根本没有删除的点没有加在树套树中的必要,预处理 出来每个不会被删除的值可以减少不少时间,也可以写成树状数组套平衡树,都会快很多 /******************** ...
- hdu 5120 Intersection
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5120 A ring is a 2-D figure bounded by two circles sh ...
- 【BZOJ】【1008】【HNOI】越狱
快速幂 大水题= = 正着找越狱情况不好找,那就反过来找不越狱的情况呗…… 总方案是$m^n$种,不越狱的有$m*(m-1)^{n-1}$种= = 负数搞搞就好了…… 莫名奇妙地T了好几发…… /** ...
- max_flow(Ford-Fulkerson) 分类: ACM TYPE 2014-09-02 01:50 110人阅读 评论(0) 收藏
#include <cstdio> #include <iostream> #include <cstring> #include<queue> usi ...
- sql server 数据页缓冲区的内存瓶颈分析
查看数据库的计数器: SELECT * FROM sys.dm_os_performance_counters **也可以使用系统的性能计监测器查看. 右键图表-> 添加计数器. ...
- Oracle 时间处理(加减)
一. 类似SQL SERVER中DateAdd select sysdate,add_months(sysdate,12) from dual; --加1年 select sysdate ...
- Hadoop分布式配置
本作品由Man_华创作,采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可.基于http://www.cnblogs.com/manhua/上的作品创作. 请先参照Linux安 ...
- uitableviewcell 和 uibutton
如果cell上面只有一个button 可以设置button.tag=IndexPath.Row;得到当前点击的行数,设置button属性的时候,可以设置一个全局的button来记住当前点击的butt ...
- 如何在帝国cms后台菜单栏中添加删除链接?
下午测试一个网上下载经过二次开发的帝国cms系统,还原完数据进入后台ytkah发现菜单栏多出了几个链接,有点不习惯,就想着怎么把它去掉.由于自己用的win7系统,搜索时没有像xp那样可以搜索包含某字符 ...
- maven 多套环境 配置(开发、测试、预发、正式)
接上一节继续,项目开发好以后,通常要在多个环境部署,象我们公司多达5种环境:本机环境(local).(开发小组内自测的)开发环境(dev).(提供给测试团队的)测试环境(test).预发布环境(pre ...