[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)所有物品都是一样的 ...
随机推荐
- Oracle分页查询
1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然! sql语句如下: SELECT * FROM (Sel ...
- win7 64位 asp+access 数据库连接出错[代码:02],请检查数据库链接文件中的连接字串
解决办法,启用32位应用程序改为true 打开“Internet 信息服务(IIS)管理器”,在最右边的窗口中点击“应用程序池”,在用到的应用程序池上点击右键,选择“高级设置”
- android 使用shape来优化界面效果
看下效果图: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android=&quo ...
- arrayToJson将数组转化为json格式的js代码 ///////////////////////zzzzzzzzzzzzzzzz
//去除空格 function trim(str) { return str.replace(/\s|\xA0/g,""); } /** *js数组转json * */ fun ...
- Coursera台大机器学习课程笔记4 -- Training versus Testing
这节的主题感觉和training,testing关系不是很大,其根本线索在于铺垫并求解一个问题: 为什么算法PLA可以正确的work?因为前面的知识告诉我们,只有当假设的个数有限的时候,我们才 ...
- Windows编程入门程序详解
引用:http://blog.csdn.net/jarvischu/article/details/8115390 1. 程序 /******************************* ...
- Swift
1.Swift项目与OC项目的区别 - Swift的类文件是以 .swift 结尾 - main.m 不见了,程序入口以 `@UIApplicationMain` - Swift中,代码都是写到 `{ ...
- JPA in Spring
JPA(Java Persistence API):Sun官方提出的Java持久化规范,定义了对象-关系映射(ORM)以及实体对象持久化的标准接口.Sun引入JPA出于两个原因:一.简化现有Java ...
- C++11特性(模板类 initializer_list)
[1]initializer_list模板类 C++primer 原文如下: 通读原文相关篇幅,分析解读内容如下: 提供initializer_list类的初衷,为了便于将有限个同一类型(或可转换为同 ...
- Swift2.3 --> Swift3.0 的变化
Swift3.0语法变化 首先和大家分享一下学习新语法的技巧: 用Xcode8打开自己的Swift2.3的项目,选择Edit->Convert->To Current Swift Synt ...