[bzoj3192][JLOI2013]删除物品(树状数组)
3192: [JLOI2013]删除物品
Time Limit: 10 Sec Memory Limit: 128 MB
Submit: 872 Solved: 508
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1
4
5
2
7
3
Sample Output
HINT
1<=N1+N2<=100000
Source
开始水博
接着上一个纪元讲的内容
这道题其实模拟就好,看题解前最好手动模拟一下
(快去模拟!)
那么在模拟时,容易想到的优化是把两个栈的栈顶接上,直接维护数列
维护时可以排序一遍,得出每个元素的顺序
比如对于5 4 1 2 7 3
排完序就是3 4 6 2 1 5
接下来维护一个01序列,表示第i位是否被弹出
那么答案就是按照排序后序列求01区间和(其实有好多细节哦)
取出一个数后置零即可
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#define LL long long
using namespace std;
int rank[],num[];
int bit[],n;
int lb(int x){
return x&(-x);
}
int cmp(const int a,const int b){
return num[a]>num[b];
}
LL q(int x){
LL ans=;
while(x){
ans+=bit[x];
x-=lb(x);
}
return ans;
}
int c(int x,int v){
while(x<=n){
bit[x]+=v;
x+=lb(x);
}
return ;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
n=a+b;
for(int i=;i<=n;i++)rank[i]=i;
rank[]=a;
for(int i=a;i;--i)scanf("%d",&num[i]);
for(int i=;i<=b;i++)scanf("%d",&num[i+a]);
sort(rank+,rank+n+,cmp);
for(int i=;i<=n;i++)c(i,);
LL ans=;
for(int i=;i<=n;i++){
if(rank[i]>rank[i-])ans+=q(rank[i]-)-q(rank[i-]);
else ans+=q(rank[i-])-q(rank[i]);//????????????????rank?????
c(rank[i],-);
}
printf("%lld\n",ans);
return ;
}
[bzoj3192][JLOI2013]删除物品(树状数组)的更多相关文章
- [JLOI2013]删除物品 树状数组
当时考试时间剩下太短了然后就挂掉了..其实是个简单的数据结构. 话说一看最小还以为是动规呢.. 将两堆头对头排.比如样例就是 541|273 因为是必须有优先级次序,依次拿的话,看优先级大小相邻的两个 ...
- [bzoj3192][JLOI2013]删除物品_树状数组_栈
删除物品 bzoj-3192 JLOI-2013 题目大意:给你n个物品,分成2堆.所有的物品有不同的优先级.我只可以将一堆中的堆顶移动到另一个堆的堆顶.而如果当前物品是全局所有物品中优先级最高的,我 ...
- bzoj3192: [JLOI2013]删除物品(树状数组)
既然要从一个堆的堆顶按顺序拿出来放到第二个堆的堆顶,那么我们就可以把两个堆顶怼在一起,这样从一个堆拿到另一个堆只需要移动指针就好了. 换句话说,把1~n倒着,n+1到n+m正着,用一个指针把两个序列分 ...
- bzoj3192 [JLOI2013]删除物品
用数组表示两个栈,将两个栈的栈顶并在一起,用树状数组维护一下操作即可. 代码 #include<cstdio> #include<algorithm> #include< ...
- BZOJ3192: [JLOI2013]删除物品(splay)
Description 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的,但是它们有不同的优先级. (3)你只能够移动某堆中位于顶端的物品. ( ...
- 1057. Stack (30) - 树状数组
题目如下: Stack is one of the most fundamental data structures, which is based on the principle of Last ...
- BZOJ 3192: [JLOI2013]删除物品 奇淫技巧&树状数组
点我看题 这题十分奇淫技巧...QAQ因为知道是树状数组的题QAQ刚开始以为维护两个数组的树状数组然后模拟从大到小,然后发现不会打QAQ 于是悄悄咪咪翻开题解了. 实际上两个数组可以看做一个数组 如 ...
- BZOJ 3192: [JLOI2013]删除物品(树状数组)
题面: https://www.lydsy.com/JudgeOnline/problem.php?id=3192 题解: 首先每次一定是来回移动直到最大的到顶上. 所以我们可以将第两个堆的堆顶接起来 ...
- BZOJ3192:[JLOI2013]删除物品——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...
随机推荐
- AppSettings和connectionStrings的却别(转)
AppSettings是ASP.NET1.1时期用的,在.NET Framework 2.0中,新增了ConnectionStrings. 1.<connectionStrings> &l ...
- Android--带你一点点封装项目 MVP+BaseActivity+Retrofit+Dagger+RxJava(一)
1,其实早就想把这些东西给封装封装的,一直没有时间,今天刚好项目进入到测试阶段了,Bug同事在哪儿测试的飞起,但发现提bug的尽然是我(得意脸),然后上午把ios的包测试了一下,顺便把服务器给测挂了( ...
- 9款一键快速搭建PHP运行环境的好工具
9款一键快速搭建PHP运行环境的好工具 胡倡萌 2011/02/19 网络资源 77,063 1 内容提要: 建立一个PHP网站,首先需要搭建PHP的开发和运行环境,对于PHP初学者也是一个难 ...
- Ansible 学习笔记
最近因为需要管理很多台机器,而这些机器又需要频繁重新安装,实在受不了Puppet需要在每个客户机上都安装一遍,于是转头开始学些Ansible.根据这段时间的使用,这个确实是神器,唯一的感觉就是相见恨晚 ...
- 测试 Prism 语法高亮
测试 Prism 对 C 语言的语法高亮 #include <stdio.h> #include "math.h" int main(void) { long int ...
- nginx auth
location / { auth_basic "closed site";##Context:http, server, location, limit_except auth_ ...
- python核心编程学习记录之执行环境
- rc.local 增加自启动
编辑 /etc/rc.d/rc.local,将要执行的命令放里面. 然后给 rc.local 增加执行权限 chmod +x rc.local . 不过该方法正在被逐步淘汰,提示建议采用自定义服务的 ...
- java socket 多线程通讯 使用mina作为服务端
客户端代码不变,参照 http://www.cnblogs.com/Westfalen/p/6251473.html 服务端代码如下: import java.io.IOException; impo ...
- mac_snailSVN
作者:潘捷链接:https://www.zhihu.com/question/19705164/answer/119484169来源:知乎著作权归作者所有,转载请联系作者获得授权. Mac下之前也有类 ...