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. 详解jQuery中 .bind() vs .live() vs .delegate() vs .on() 的区别

    转载自:http://zhuzhichao.com/2013/12/differences-between-jquery-bind-vs-live/ 我见过很多开发者很困惑关于jQuery中的.bin ...

  2. 用命令部署WebPart

    Webpart一般是一个wsp文件,可以在VS里面通过右键来部署.但一般真正的生产服务器上面是不会安装VS的,所以一般情况下是把wsp文件拷贝到服务器上面然后启动PowerShell用命令来部署. 部 ...

  3. python内置模块[re]

    python内置模块[re] re模块: python的re模块(Regular Expression正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  4. 【jQuery】 资料

    [jQuery] 资料 1. 选择器 http://www.w3school.com.cn/jquery/jquery_ref_selectors.asp 2. 事件 http://www.w3sch ...

  5. Bootstrap开发漂亮的前端界面之实现原理

    引:Bootstrap采用的是一个“响应式”设计.响应式Web 设计是一个让用户通过各种尺寸的设备浏览网站获得良好的视觉效果的方法.例如,您先在计算机显示器上浏览一个网站,然后再智能手机上浏览,智能手 ...

  6. C++怎么用二维数组作为形参传入

    原文地址:http://blog.csdn.net/xuleicsu/article/details/919801 如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数, ...

  7. 「学习记录」《数值分析》第三章计算实习题(Python语言)

    第三题暂缺,之后补充. import matplotlib.pyplot as plt import numpy as np import scipy.optimize as so import sy ...

  8. IDEA 中.properties文件中文自动转Unicode编码及乱码问题

    问题描述: 在使用IDEA开发工具编辑属性文件(.properties)的时候出现中文自动转成了Unicode编码,或在读取属性文件的时候中文出现乱码. 问题解决: 进入 File -> Set ...

  9. 用Python 的一些用法与 JS 进行类比,看有什么相似?

    Python 是一门运用很广泛的语言,自动化脚本.爬虫,甚至在深度学习领域也都有 Python 的身影.作为一名前端开发者,也了解 ES6 中的很多特性借鉴自 Python (比如默认参数.解构赋值. ...

  10. Elasticsearch中的DocValues

    Elasticsearch最近一段时间非常火,以致于背后的公司都改名为Elastic了,因为Elasticsearch已经不仅限于搜索,反而更多的用在大数据分析场景,所以在公司品牌上开始“去Searc ...