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. JDK8新垃圾回收机制--G1垃圾回收机制

    G1全称是Garbage First Garbage Collector,使用G1的目的是简化性能优化的复杂性.例如,G1的主要输入参数是初始化和最大Java堆大小.最大GC中断时间. G1 GC由Y ...

  2. 08 datetime与logging模块(进阶)

    datetime与logging模块 阶段一:日期与时间 1.datetime 模块中 主要类: 类名 功能说明 date 日期对象,常用的属性有year, month, day time 时间对象h ...

  3. MySQL 主从服务器配置

    在主服务器Ubuntu上进行备份,执行命令: mysqldump -uroot -p --all-databases --lock-all-tables > ~/master_db.sql -u ...

  4. Leecode刷题之旅-C语言/python-136只出现一次的数字

    /* * @lc app=leetcode.cn id=136 lang=c * * [136] 只出现一次的数字 * * https://leetcode-cn.com/problems/singl ...

  5. Java+Selenium3自动化测试框架设计系列--href="javascript:void(0)"如何获得元素定位

    经过前面两篇文章的铺 垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题.我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的 tab窗口打开页面B,这个时候,你 ...

  6. Java 中编码与摘要算法

    URL 编码与解码 String s = "你好,世界!"; // URL 编码 String urlEncodedString = URLEncoder.encode(s, &q ...

  7. Android开发——Android系统启动以及APK安装、启动过程

    0. 前言   从Android手机打开开关,到我们可以使用其中的app时,这个启动过程到底是怎么样的? 1.  系统上电 当给Android系统上电,在电源接通的瞬间,CPU内的寄存器和各引脚均会被 ...

  8. 【数据库】 SQL 通配符

    [数据库] SQL 通配符 1. % : 替代一个或多个字符 2. _ : 仅替代一个字符 3. [] : 字符列中的任何单一字符 4. [^charlist] 或者 [!charlist]  : 不 ...

  9. 【廖雪峰老师python教程】——错误和调试

    错误处理 try...except...finally...机制 try: print('try...') r = 10 / 0 print('result:', r) except ZeroDivi ...

  10. 第二篇 Fiddler配置_浏览器&手机

    什么是Fiddler? 网络项目的开发和测试中,Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的 ,可以说是非常常用的手头工具了,本文就Fiddler使用和配置进行说明. ...