bzoj3192 [JLOI2013]删除物品
用数组表示两个栈,将两个栈的栈顶并在一起,用树状数组维护一下操作即可。
代码
#include<cstdio>
#include<algorithm>
#include<map>
#define lb(x) (x&-x)
using namespace std;
const int N = ;
int n,m,i,id[N],a[N],b[N],c[N],top,tot;
long long ans;
map<int,int> ma;
void cc(int x,int w)
{
while (x<=n+m)
{
c[x]+=w;
x+=lb(x);
}
}
int sum(int x)
{
int ans=;
while (x)
{
ans+=c[x];
x-=lb(x);
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for (i=;i<=n;i++)
scanf("%d",&a[i]),b[i]=a[i];
for (i=n+;i<=n+m;i++)
scanf("%d",&a[i]),b[i]=a[i];
sort(b+,b++m+n);
for (i=;i<=n+m;i++)
if (ma[b[i]]==) ma[b[i]]=++tot;
for (i=;i<=n+m;i++) a[i]=ma[a[i]];
for (i=;i<=n;i++)
id[a[i]]=n-i+;
for (i=;i<=m;i++)
id[a[n+i]]=n+i; for (i=;i<=n+m;i++) cc(i,); top=n;
for (i=n+m;i>=;i--)
{
if (id[i]<=top)
{
ans+=sum(top)-sum(id[i]);
top=id[i];
}
else
{
ans+=sum(id[i]-)-sum(top);
top=id[i];
}
cc(id[i],-);
}
printf("%lld\n",ans);
}
bzoj3192 [JLOI2013]删除物品的更多相关文章
- [bzoj3192][JLOI2013]删除物品(树状数组)
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 508[Submit][Status ...
- [bzoj3192][JLOI2013]删除物品_树状数组_栈
删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...
- BZOJ3192: [JLOI2013]删除物品(splay)
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- bzoj3192: [JLOI2013]删除物品(树状数组)
既然要从一个堆的堆顶按顺序拿出来放到第二个堆的堆顶,那么我们就可以把两个堆顶怼在一起,这样从一个堆拿到另一个堆只需要移动指针就好了. 换句话说,把1~n倒着,n+1到n+m正着,用一个指针把两个序列分 ...
- 洛谷 P3253 [JLOI2013]删除物品 解题报告
P3253 [JLOI2013]删除物品 题目描述 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能 ...
- 3192: [JLOI2013]删除物品
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...
- BZOJ3192:[JLOI2013]删除物品——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...
- bzoj 3192: [JLOI2013]删除物品
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- [JLOI2013]删除物品
嘟嘟嘟 只要每一次将优先级最高的上面的物品移走,就一定能保证是最优解. 所以我们只要想办法简化这个模拟移物品的过程,看完了题解后,发现可以这么想,我们可以把两个栈头碰头的挨在一起,然后设一个指针代表两 ...
随机推荐
- 蓝牙BLE LINK LAYER剖析(二) -- PDU
DATA FORMAT The Link Layer has only one packet format used for both advertising channel packets and ...
- C# Json时间类型的转换
DateTime dt1 = new DateTime(1970, 1, 1); dt1 = dt1.AddMilliseconds(long.Parse(list.Items[i].UpdatedA ...
- 编写category时的便利宏(用于解决category方法从静态库中加载需要特别设置的问题)
代码摘录自YYKit:https://github.com/ibireme/YYKit /** Add this macro before each category implementation, ...
- 在大数据中,关于native包的编译步骤
一.问题的由来: 二.解决问题的方法(所有的操作在root下完成): 1.前期需要的环境,下面的已经在伪分布式中配置好,不再重复 配置好jdk 配置好hadoop 2.上传还需要包 apache-ma ...
- Bulk Insert & BCP执行效率对比
我们以BCP导出的CSV数据文件,分别使用Bulk insert与BCP导入数据库,对比两种方法执行效率 备注:导入目标表创建了分区聚集索引 1.BCP导出csv数据文件 数据量:15000000行, ...
- 在express项目中有效组织和使用mongoose
平凡之路 1.创建express项目 express mongooseExpress 2.最简express var express = require("express"); v ...
- css模仿表格 居中
<div class="service_box"><div class="service_list"> <span class=& ...
- VLC说明
一.简介 vlc的全名是Video Lan Client,是一个开源的.跨平台的视频播放器.VLC支持大量的音视频传输.封装和编码格式,完整的功能特性列表可以在这里获得http://www.video ...
- Windows下使用Git和GitHub.com
1.首先介绍一下什么是Git和GitHub Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大 ...
- 深入css中的margin
深入css中的margin 第一:margin-top css代码(元素没有任何定位的情况下,并且元素默认为block) <style type="text/css"> ...