bzoj 3192: [JLOI2013]删除物品
Description
Input
Output
Sample Input
1
4
5
2
7
3
Sample Output
HINT
1<=N1+N2<=100000
Source
%%%Anson的两棵Splay大模拟;
这个题以意就是让你按优先级来模拟移动,然后这题有一个很妙的做法:
把两个栈当成一个数组,然后把第一个栈反着存入,于是提取的移动区间就是连续的了;
比如样例变为 5 4 1 2 7 3;
然后我们就是要按优先级从大到小来移动当前顶端的位置last,从当前点的位置到顶端进行区间查询还要移动多少个就行了,然后再把自己删掉并移动last;
只有单点修改和区间查询,用树状数组即可;
//MADE BY QT666
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=100050;
int a[N],b[N],tr[N],n;
struct data{
int id,v;
}g[N];
bool cmp(const data &a,const data &b){return a.v>b.v;}
int lowbit(int x){return x&(-x);}
void update(int x,int v){
if(x==0) return;
for(int i=x;i<=n;i+=lowbit(i)) tr[i]+=v;
}
int query(int x){
int ret=0;
for(int i=x;i;i-=lowbit(i)) ret+=tr[i];
return ret;
}
int ask(int l,int r){return query(r)-query(l-1);}
int main(){
freopen("hzoi_remove.in","r",stdin);
freopen("hzoi_remove.out","w",stdout);
int n1,n2;
scanf("%d%d",&n1,&n2);
for(int i=1;i<=n1;i++) scanf("%d",&a[i]);
for(int i=1;i<=n2;i++) scanf("%d",&b[i]);
for(int i=n1;i>=1;i--) ++n,g[n]=(data){n,a[i]};
for(int i=1;i<=n2;i++) ++n,g[n]=(data){n,b[i]};
sort(g+1,g+1+n,cmp);
ll ans=0;
for(int i=1;i<=n;i++) update(g[i].id,1);
int last=n1;
for(int i=1;i<=n;i++){
if(g[i].id>last) ans+=ask(last+1,g[i].id-1);
else ans+=ask(g[i].id+1,last);
update(g[i].id,-1);last=g[i].id;
}
printf("%lld\n",ans);
return 0;
}
bzoj 3192: [JLOI2013]删除物品的更多相关文章
- BZOJ 3192: [JLOI2013]删除物品(树状数组)
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3192 题解: 首先每次一定是来回移动直到最大的到顶上. 所以我们可以将第两个堆的堆顶接起来 ...
- BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组
点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...
- 3192: [JLOI2013]删除物品
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1366 Solved: 794 [Submit][Statu ...
- [bzoj3192][JLOI2013]删除物品(树状数组)
3192: [JLOI2013]删除物品 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 872 Solved: 508[Submit][Status ...
- 洛谷 P3253 [JLOI2013]删除物品 解题报告
P3253 [JLOI2013]删除物品 题目描述 箱子再分配问题需要解决如下问题: (1)一共有\(N\)个物品,堆成\(M\)堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能 ...
- [bzoj3192][JLOI2013]删除物品_树状数组_栈
删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...
- BZOJ3192:[JLOI2013]删除物品——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...
- [JLOI2013]删除物品
嘟嘟嘟 只要每一次将优先级最高的上面的物品移走,就一定能保证是最优解. 所以我们只要想办法简化这个模拟移物品的过程,看完了题解后,发现可以这么想,我们可以把两个栈头碰头的挨在一起,然后设一个指针代表两 ...
- BZOJ3192: [JLOI2013]删除物品(splay)
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
随机推荐
- C#对SQLite、Access数据库操作的封装,很好用的~
1.对SQLite的封装: using System; using System.Collections.Generic; using System.Linq; using System.Text; ...
- 关于Unity里动态加载图片
Resources.Load 使用该方法可以动态加载资源 过程: 1.首先需要在Project面板里创建一个名为Resources的文件夹(名字必须是这个 不能写错啊) 2.把要加载的游戏对象放到该目 ...
- JAVA的向上转型和向下转型怎么理解呢?
在定义中是子类向父类转型称为向上转型,父类向子类转型是向下转型(必须先向上转型过,才能向下转型), 但是在下面类定义后,我得到的结果却不同.求大佬解惑 class superclass{ public ...
- angularjs 给封装的模态框元素传值,和实现兄弟传值
本例实现封装的元素所放的位置不同,而选择不同的传值,这里举例封装了bootstrap模态框,以后也方便大家去直接使用.方法举例如下:首先主页调用css/js有: <link rel=" ...
- 洛谷 P3928 Sequence
题目描述 小强喜欢数列.有一天,他心血来潮,写下了三个长度均为n的数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种,波动数列. 阿米巴把他的喜好告诉了小强.小强便打算找出这三个数列内的最长波动数列. ...
- MySQL系列:高可用架构之MHA
前言 从11年毕业到现在,工作也好些年头,入坑mysql也有近四年的时间,也捣鼓过像mongodb.redis.cassandra.neo4j等Nosql数据库.其实一直想写博客分享下工作上的零零碎碎 ...
- ajax xmlhttp 局部显示另一个页面
function loadXMLDoc(url) { var xmlhttp; if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera ...
- hdu4416 Good Article Good sentence (后缀数组)
题意:问a串中有多少种字符串集合B中没有的连续子串. a的长度10^5,B中的总长度为不超过10^5. 解法:后缀数组题目:后缀数组能够非常easy算出来一个串中有多少种子串. 把a和B集合连起来.求 ...
- windows下wamp多域名的配置
前面的话 本文将详细介绍windows下wamp多域名的配置方法 修改hosts文件 hosts文件的位置:系统盘→“windows”→“System32”→“drivers”→“etc” 打开hos ...
- Ajax 请求后打开新窗口被拦截的解决方案
公司业务上有个场景,需请求后台获取支付链接地址,再打开地址引导用户购买.这样的场景在其他企业应该也很场景.但是遇到个很常见的问题,Ajax后直接用window.open(url),会被浏览器作为广告拦 ...