【NOIP模拟赛】beautiful 乱搞(平衡树)+ST
我用平衡树处理的这道题,然而这种方法还是要看评测姬.....
正解是乱搞....就是枚举每一位数作为中位数,比他小的看做-1比他大的看做1,那么我们从一开始就有了一个绵延的山,我们记录这个数之前出现过的距水平线高度差,如果我们在右边找到了这个同样的距离就意味着我们中间的操作为0那么在这两个相同水平面之前的距离就是他作为中位数的一个区间。
似乎这是一种中位数套路........
#include <cstdio>
namespace Pre{
inline void read(int &sum){
register char ch=getchar();
for(sum=;ch<''||ch>'';ch=getchar());
for(;ch>=''&&ch<='';sum=(sum<<)+(sum<<)+ch-'',ch=getchar());
}
inline int Max(int x,int y){
return x>y?x:y;
}
int a[],n;
int Ans[];
int St[][],LOG[],Bin[];
inline int get_ans(int l,int r){
int len=r-l+;
return Max(St[l][LOG[len]],St[r-Bin[LOG[len]]+][LOG[len]]);
}
}
namespace Point{
struct point{
int key,pos;
inline friend bool operator < (point a,point b);
inline friend bool operator > (point a,point b);
}A[];
inline bool operator < (point a,point b){
return a.key<b.key||(a.key==b.key&&a.pos<b.pos);
}
inline bool operator > (point a,point b){
return b<a;
}
}
namespace SGT{
const double alpha=0.75;
struct ScapeGoat_Tree{
ScapeGoat_Tree *ch[];
int size;
Point::point key;
void pushup(){
size=ch[]->size+ch[]->size+;
}
bool isbad(){
return size*alpha+<ch[]->size||size*alpha+<ch[]->size;
}
}*null,*root,mempool[],*stack[],*list[];
int len,top;
inline void Init(){
null=mempool;
null->ch[]=null->ch[]=null;
root=null;
for(int i=;i<;i++)stack[++top]=mempool+i;
}
inline ScapeGoat_Tree *New(Point::point key){
ScapeGoat_Tree *p=stack[top--];
p->ch[]=p->ch[]=null;
p->size=;
p->key=key;
return p;
}
inline void clear(ScapeGoat_Tree *p){
if(p==null)return;
clear(p->ch[]);
clear(p->ch[]);
stack[++top]=p;
}
inline void Clear(){
clear(root);
root=null;
}
inline void travel(ScapeGoat_Tree *p){
if(p==null)return;
travel(p->ch[]);
list[++len]=p;
travel(p->ch[]);
}
inline ScapeGoat_Tree *divide(int l,int r){
if(l>r)return null;
int mid=(l+r)>>;
list[mid]->ch[]=divide(l,mid-);
list[mid]->ch[]=divide(mid+,r);
list[mid]->pushup();
return list[mid];
}
inline void rebuild(ScapeGoat_Tree *&p){
len=;
travel(p);
p=divide(,len);
}
inline ScapeGoat_Tree **insert(ScapeGoat_Tree *&p,Point::point key){
if(p==null){
p=New(key);
return &null;
}
p->size++;
ScapeGoat_Tree **ret=insert(p->ch[key>p->key],key);
if(p->isbad())ret=&p;
return ret;
}
inline void Insert(Point::point key){
ScapeGoat_Tree **p=insert(root,key);
if(*p!=null)rebuild(*p);
}
inline Point::point get_kth(int k){
ScapeGoat_Tree *p=root;
while()
if(p->ch[]->size>=k)p=p->ch[];
else if(p->ch[]->size+==k)return p->key;
else k-=p->ch[]->size+,p=p->ch[];
}
}
namespace PRE_WORK{
void Get_Max(){
using namespace Point;
for(int i=;i<=Pre::n;i++){
SGT::Clear();
Pre::Ans[i]=Pre::Max(,Pre::Ans[i]);
SGT::Insert(A[i]);
for(int j=i+;j<=Pre::n;j++){
SGT::Insert(A[j]);
if(SGT::root->size&){
int Num=SGT::get_kth((SGT::root->size+)>>).pos;
Pre::Ans[Num]=Pre::Max(Pre::Ans[Num],SGT::root->size);
}
}
}
}
void Get_ST(){
using namespace Pre;
Bin[]=;
for(int i=;i<;i++)Bin[i]=Bin[i-]<<;
LOG[]=-;
for(int i=;i<=n;i++)LOG[i]=LOG[i>>]+;
for(int i=;i<=n;i++)St[i][]=Ans[i];
for(int i=;Bin[i]<=n;i++)
for(int j=;j+Bin[i]-<=n;j++)
St[j][i]=Max(St[j][i-],St[j+Bin[i-]][i-]);
}
}
namespace Main{
inline void Init(){
SGT::Init();
using Pre::read;
read(Pre::n);
for(int i=;i<=Pre::n;i++){
read(Pre::a[i]);
Point::A[i]=(Point::point){Pre::a[i],i};
}
PRE_WORK::Get_Max();
PRE_WORK::Get_ST();
}
inline void Work(){
using namespace Pre;
int Q;read(Q);
for(int i=,l,r;i<=Q;i++){
read(l),read(r);
printf("%d\n",get_ans(l,r));
}
}
}
int main(){
using namespace Main;
Init(),Work();
return ;
}
【NOIP模拟赛】beautiful 乱搞(平衡树)+ST的更多相关文章
- CH Round #54 - Streaming #5 (NOIP模拟赛Day1)
A.珠 题目:http://ch.ezoj.tk/contest/CH%20Round%20%2354%20-%20Streaming%20%235%20(NOIP模拟赛Day1)/珠 题解:sb题, ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- NOIP模拟赛20161022
NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...
- NOIP模拟赛 by hzwer
2015年10月04日NOIP模拟赛 by hzwer (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...
- 2016-06-19 NOIP模拟赛
2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...
- 【HHHOJ】NOIP模拟赛 玖 解题报告
点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...
- 2014-10-31 NOIP模拟赛
10.30 NOIp 模拟赛 时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...
- 11/1 NOIP 模拟赛
11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...
- contesthunter暑假NOIP模拟赛第一场题解
contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...
- 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程
数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...
随机推荐
- python爬虫 爬取steam热销游戏
好久没更新了啊...最近超忙 这学期学了学python 感觉很有趣 就写着玩~~~ 爬取的页面是:https://store.steampowered.com/search/?filter=globa ...
- linux-课题练习1
1.创建组testgroup: 2.创建用户a2012,先采用默认设置创建,然后使该用户加入testgroup组. 3.创建用户a2013,其用户主目录为/tmp/a2013,其主组为testgrou ...
- debounce、throttle、requestAnimationFrame
今天review同事代码,代码实现了返回顶部的功能,用到了lodash库中的throttle,我看着眼生,于是乎去看了下lodash文档,然后牵出了debounce,具体的知识点,这里不再赘述,底部的 ...
- Java-Swing中使用Web富文本编辑器
资料下载 (截取出了邮件发送的功能.) 2018/11/10 因为要 win7 电脑 IE 8 的原因,使用了 jxBrower 拓展,更容易使用,参考链接(推荐) 问题介绍 window客户端软件的 ...
- Altium Designer -- 精心总结
如需转载请注明出处:http://blog.csdn.NET/qq_29350001/article/details/52199356 以前是使用DXP2004来画图的,后来转行.想来已经有一年半的时 ...
- Ganglia3.1.7安装与配置(收录)
一.所需要软件 二.安装过程 1.Ganglia运行平台的安装 2.Ganglia依赖库的安装 3.RRDTool的安装 4.Ganglia的安装 (包括使用yum方式 ...
- 分分钟搞定redis
随着科技不断的发展,使用到的技术也是更新换代,大家都知道当一个程序用户量上来之后,必然是要做数据缓存的,那么如何去实现的呢,在之前我们一直使用memcache去做数据缓存,现在众所周知主流的缓存技术已 ...
- 「日常训练」 Soldier and Traveling (CFR304D2E)
题意 (CodeForces 546E) 对一个无向图,给出图的情况与各个节点的人数/目标人数.每个节点的人只可以待在自己的城市或走到与他相邻的节点. 问最后是否有解,输出一可行解(我以为是必须和答案 ...
- win10子系统Ubuntu18.04下安装图形界面
前提:windows 10 已经安装WSL(windows subsystem for linux),并能正确运行Bash. 要想使用Linux的图形用户界面通常有两种方法,一种是使用X-Window ...
- redux使用过程中遇到的两个致命的关键点
一.在reducer中,返回的state必须是全新的对象,否则,redux不会执行listening方法,因为redux会认为state没有更新过,没必要重新渲染view. 出现问题的例子: cons ...