biubiu~~~

我用平衡树处理的这道题,然而这种方法还是要看评测姬.....

正解是乱搞....就是枚举每一位数作为中位数,比他小的看做-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的更多相关文章

  1. 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题, ...

  2. NOIP模拟赛-2018.11.7

    NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...

  3. NOIP模拟赛20161022

    NOIP模拟赛2016-10-22 题目名 东风谷早苗 西行寺幽幽子 琪露诺 上白泽慧音 源文件 robot.cpp/c/pas spring.cpp/c/pas iceroad.cpp/c/pas ...

  4. NOIP模拟赛 by hzwer

    2015年10月04日NOIP模拟赛 by hzwer    (这是小奇=> 小奇挖矿2(mining) [题目背景] 小奇飞船的钻头开启了无限耐久+精准采集模式!这次它要将原矿运到泛光之源的矿 ...

  5. 2016-06-19 NOIP模拟赛

          2016-06-19 NOIP模拟赛 by coolyangzc 共3道题目,时间3小时 题目名 高级打字机 不等数列 经营与开发 源文件 type.cpp/c/pas num.cpp/c ...

  6. 【HHHOJ】NOIP模拟赛 玖 解题报告

    点此进入比赛 得分: \(100+20+100=220\)(还不错) 排名: \(Rank\ 16\) \(Rating\):\(+20\) \(T1\):[HHHOJ263]「NOIP模拟赛 玖」三 ...

  7. 2014-10-31 NOIP模拟赛

        10.30 NOIp  模拟赛   时间 空间 测试点 评测方式 挖掘机(dig.*) 1s 256M 10 传统 黑红树(brtree.*) 2s 256M 10 传统 藏宝图(treas. ...

  8. 11/1 NOIP 模拟赛

    11.1 NOIP 模拟赛 期望得分:50:实际得分:50: 思路:暴力枚举 + 快速幂 #include <algorithm> #include <cstring> #in ...

  9. contesthunter暑假NOIP模拟赛第一场题解

    contesthunter暑假NOIP模拟赛#1题解: 第一题:杯具大派送 水题.枚举A,B的公约数即可. #include <algorithm> #include <cmath& ...

  10. 大家AK杯 灰天飞雁NOIP模拟赛题解/数据/标程

    数据 http://files.cnblogs.com/htfy/data.zip 简要题解 桌球碰撞 纯模拟,注意一开始就在袋口和v=0的情况.v和坐标可以是小数.为保险起见最好用extended/ ...

随机推荐

  1. MySQL学习路线图

  2. 004---os & sys

    os模块和sys模块 这两个模块都提供了很多与操作系统之间交互的功能 使用 import os #当前脚本的工作目录,不是脚本目录 print(os.getcwd()) # 获取指定目录下的所有文件和 ...

  3. vue---day01

    1.let和const var 全局作用域和函数作用域 存在变量提升 其实是个bug 可以重复声明 let 块级作用域 不存在变量提升 不能重复声明 const 常量 和let一样还有另外两个 定义的 ...

  4. 使用source命令解决mysql导入乱码问题

    设定编码格式:mysql -u root -p --default-character-set=utf8 use dbname source /root/newsdata.sql

  5. python基础之进程间通信、进程池、协程

    进程间通信 进程彼此之间互相隔离,要实现进程间通信(IPC),multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的. 进程队列queue 不同于线程queue,进程 ...

  6. 8.Mongodb备份与恢复

    1.备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h:服务器地址,也可以指定端口号 -d:需要备份的数据库名称 -o:备份的数据存放位置,此目 ...

  7. 7 tftp

    1. TFTP协议介绍 TFTP(Trivial File Transfer Protocol,简单文件传输协议) 是TCP/IP协议族中的一个用来在客户端与服务器之间进行简单文件传输的协议 特点: ...

  8. 微信H5支付 在其他浏览器调用微信支付

    微信H5支付的相关资料不是很多.不过步骤上来说不是很复杂 比公众号支付简单很多. 先上官方文档吧 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapt ...

  9. Word中使用宏调整表格

    Dim i As Integer   For i = 1 To Selection.Tables.Count Selection.Tables(i).Columns(9).Delete Selecti ...

  10. 白话HMM系列1——从一个缩略语还原的例子说起

    HMM到底是一个什么样的东西,我想从我研究的一个应用场景开始说起.之所以想重新描述一下我对HMM的理解,是因为上次面试百度糯米的时候,自己没有把HMM在应用上说的很明白,不过糯米的那位郑姓面试官我也是 ...