
bzoj3192: [JLOI2013]删除物品
发布日期:2021-05-06 23:47:58
浏览次数:21
分类:技术文章
本文共 1571 字,大约阅读时间需要 5 分钟。
Description
箱子再分配问题需要解决如下问题:
(1)一共有N个物品,堆成M堆。 (2)所有物品都是一样的,但是它们有不同的优先级。 (3)你只能够移动某堆中位于顶端的物品。 (4)你可以把任意一堆中位于顶端的物品移动到其它某堆的顶端。若此物品是当前所有物品中优先级最高的,可以直接将之删除而不用移动。(5)求出将所有物品删除所需的最小步数。删除操作不计入步数之中。
(6)只是一个比较难解决的问题,这里你只需要解决一个比较简单的版本: 不会有两个物品有着相同的优先级,且M=2Input
第一行是包含两个整数N1,N2分别表示两堆物品的个数。
接下来有N1行整数按照从顶到底的顺序分别给出了第一堆物品中的优先级,数字越大,优先级越高。 再接下来的N2行按照同样的格式给出了第二堆物品的优先级。Output
对于每个数据,请输出一个整数,即最小移动步数。
Sample Input
3 3
1
4
5
2
7
3
Sample Output
6
HINT
1<=N1+N2<=100000
题解
突然发现把第一组数倒着输入,后一组正着,把顶放在中间,移动的问题就完美解决了。。
比如样例,数组中存5 4 1 2 7 3 移动就是改变分割点,整个操作用树状数组实现。
#include#include #include #include using namespace std;typedef long long LL;const LL N=100005;struct qq{ LL x,id;}a[N];LL f[N];LL n1,n2;LL n;bool cmp (qq a,qq b){ return a.x>b.x;}LL lb (LL x){ return x&(-x);}void change (LL x,LL y){ while (x<=n) { f[x]+=y; x+=lb(x); }}LL get (LL x){ LL lalal=0; while (x>=1) { lalal=lalal+f[x]; x-=lb(x); } return lalal;}int main(){ scanf("%lld%lld",&n1,&n2); for (LL u=n1;u>=1;u--) { scanf("%lld",&a[u].x); a[u].id=u; } for (LL u=1;u<=n2;u++) { scanf("%lld",&a[u+n1].x); a[u+n1].id=u+n1; } n=n1+n2; sort(a+1,a+1+n,cmp); for (LL u=1;u<=n;u++) change(u,1); LL ans=0; a[0].id=n1; for (LL u=1;u<=n;u++) { LL x=a[u-1].id,y=a[u].id; if (y>x) ans=ans+get(y-1)-get(x);//FYC:y这个点不能算,要减一 else ans=ans+get(x)-get(y);//FYC:这里x不能减一,因为第一次会错,而然后面已近删了没影响 change(y,-1); } printf("%lld\n",ans); return 0;}
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年03月10日 18时47分30秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Vue爬坑之v-model和v-bind(二)
2019-03-04
神犇和蒟蒻
2019-03-04
vue组件传参 props default 数组/对象的默认值应当由一个工厂函数返回
2019-03-04
vue爬坑之 父组件向子组件异步传参 子组件中拿不到值的解决方法
2019-03-04
js基础复习5-原型链与js的成员查找机制
2019-03-04
js基础复习8-call方法简单使用以及javascript继承
2019-03-04
【游记】被吊打DAY2
2019-03-04
ThinkCMF报错未定义变量vo
2019-03-04
微信公众号开发之素材管理
2019-03-04
修改dynamic web module的版本大小
2019-03-04
IDEA 成功在tomcat上部署项目
2019-03-04
Node.js response 页面中文乱码
2019-03-04
谷歌浏览器 禁用JavaScript
2019-03-04
gitee 修改个人域名 个人空间地址 URL
2019-03-04
C++11中bind的使用错误
2019-03-04
Android中CMake的使用之一初步总结
2019-03-04
一起学智能合约之四表达式和控制结构
2019-03-04
futex同步机制分析之三内核实现
2019-03-04
多线程的伪共享
2019-03-04