LG1801 【黑匣子_NOI导刊2010提高(06)】
看到各路dalao用平衡树的做法,表示本人不才,并不会。
然而我会优先队列_huaji_,并且发现用堆解题的dalao们并没有基于在线的做法
于是我的showtime到了
评测结果:https://www.luogu.org/record/show?rid=4645103
先讲一下思路:
题干所描述的** i **的实际值并不重要,他只是作为堆的一个位置
当然如果你暴力模拟的话肯定会超时
为此我们考虑维护两个堆,一个是大根堆,一个是小根堆,且满足小根堆中的数比大根堆中的数大
用bool变量flag来表示当前所操作的是大根堆还是小根堆
首先是ADD(x),按flag和x分为四种情况
然后是GET,按flag分为两种情况
具体操作见以下代码:
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<vector>
#include<list>
#include<stack>
#include<queue>
#include<deque>
#include<map>
#include<set>
#include<algorithm>
#pragma GCC optimize(3)//STL必带
using namespace std;
#define ll long long
const int maxn=2e5+10;
const int INF=0x7fffffff;
inline void read(int&x){//卡常的输入
int data=0,w=1;
char ch=getchar();
while(ch!='-'&&!isdigit(ch))
ch=getchar();
if(ch=='-')
w=-1,ch=getchar();
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
x=data*w;
}
void write(int x){//卡常的输出
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar('0'+x%10);
}
int a[maxn],u[maxn]={0};
priority_queue <int,vector<int>,less<int> > lrh;//大根堆,large root heap
priority_queue <int,vector<int>,greater<int> > srh;//小根堆,small root heap
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int m,n;
read(m);read(n);
for(int i=1;i<=m;++i)
read(a[i]);
int t;
for(int i=1;i<=n;++i){
read(t);
++u[t];
}
/*clog<<"u:"<<endl;
for(int i=1;i<=m;++i)
clog<<i<<" "<<u[i]<<endl;
clog<<"uend"<<endl;*/
bool flag=1;
srh.push(INF); //这个细节很重要,INF的值对此题没有影响,但是如果不加对第一个数的操作会RE的
#define x a[i]
#define y u[i]
for(int i=1;i<=m;++i){
if(flag)//ADD(x)
if(x<srh.top()){
lrh.push(x);
flag=0;
}
else
srh.push(x);
else
if(x<lrh.top()){//这一步是ADD的精华所在,对两个对做了等价变换
srh.push(lrh.top());//i值前移,因而大根堆要把最大数给小根堆
lrh.pop();
lrh.push(x);
}
else
srh.push(x);
while(y--){//GET
// clog<<"once in "<<i<<endl;
if(flag){//这一步是GET的精华所在,对两个对做了等价变换
write(srh.top());putchar('\n');
lrh.push(srh.top());//i值后移,因而小根堆要把最小数给大根堆
srh.pop();
}
else{
write(lrh.top());putchar('\n');
flag=1;
}
}
}
// fclose(stdin);
// fclose(stdout);
return 0;
}
LG1801 【黑匣子_NOI导刊2010提高(06)】的更多相关文章
- P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- Luogu P1801 黑匣子_NOI导刊2010提高(06)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)(未完)
P1801 黑匣子_NOI导刊2010提高(06) 题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个 ...
- 【洛谷】【堆】P1801 黑匣子_NOI导刊2010提高(06)
[题目描述:] Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两 ...
- 题解 P1801 【黑匣子_NOI导刊2010提高(06)】
蒟蒻来发题解了.我仔细看了一下其他题解,各位巨佬用了堆,红黑树,splay,treap之类的强大算法,表示蒟蒻的我只会口胡这些算法,所以我决定用一种极其易理解的算法————fhq treap,作为tr ...
- 【luogu P1801 黑匣子_NOI导刊2010提高(06)】 题解
题目链接:https://www.luogu.org/problemnew/show/P1801 替罪羊树吼啊! #include <cstdio> #include <cstrin ...
- [洛谷P1801]黑匣子_NOI导刊2010提高(06)
题目大意:两个操作:向一个可重集中加入一个元素:询问第$k$大的数($k$为之前询问的个数加一) 题解:离散化,权值线段树直接查询 卡点:无 C++ Code: #include <cstdio ...
- 洛谷 P1801 黑匣子_NOI导刊2010提高(06)
题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...
- 黑匣子_NOI导刊2010提高(06) Splay Tree
题目描述 Black Box是一种原始的数据库.它可以储存一个整数数组,还有一个特别的变量i.最开始的时候Black Box是空的.而i等于0.这个Black Box要处理一串命令. 命令只有两种: ...
随机推荐
- Oracle 起诉 Google 事件
最近,Google 和 Oracle 纠缠多年的“Java 侵权案”又有了新的判决结果.Google 在此次对决中败诉,并可能需要支付高达88亿美元的赔偿金.这个案件还引发关于 API(应用程序编程接 ...
- php时区设置 warning: strtotime(): It is not safe to rely on the system's timezone settings
warning: strtotime(): It is not safe to rely on the system's timezone settings warning: strtotime(): ...
- protected internal == internal
总结:在同程序集下,protected internal类型修饰的成员变量可以在基类或派生类的类内.类外访问(同程序集下protected internal和internal访问性质相同,此处保留了i ...
- Confluence 6 使用 LDAP 授权连接一个内部目录 - 用户 Schema 设置
请注意:这部分仅在拷贝用户登录(Copy User on Login)功能被启用后可见. 其他用户 DN(Additional User DN) 这个值被用在进行用户查找和载入的时候来针对 base ...
- Confluence 6 LDAP 服务器配置
名字(Name) 输入一个有意义的 LDAP 服务器名字,会让你更好的识别你的目录服务器.例如: Example Company Staff Directory Example Company Cor ...
- hdu-4678-sg
Mine Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submis ...
- nyoj860(01变形)
http://acm.nyist.net/JudgeOnline/problem.php?pid=860 又见01背包 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 ...
- CoderForce 180D-Name (构造+回溯)
题目大意:给两个字符串s,t,用s中的字符重新组合构造出按字典序最小的但比t大的新字符串. 题目分析:先统计s中各个字母出现的次数,然后从t的左端向右端依次构造出新串的每一位上的字母.这个过程我是用回 ...
- 43. Multiply Strings 字符串表示的大数乘法
Given two numbers represented as strings, return multiplication of the numbers as a string. Note: Th ...
- iOS UI-微博案例(通过代码自定义Cell)
一.Model BWWeiBo数据模型 #import <Foundation/Foundation.h> @interface BWWeiBo : NSObject @property ...