【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/ ...
随机推荐
- 利用PHP str_replace()函数替换符合百度MIP内容标准
了解过百度MIP的同学都知道(什么?你不知道什么是百度MIP?就是移动网页加速器鸭
- docker学习(一) 安装
一.什么是docker 参见https://baike.baidu.com/item/Docker/13344470?fr=aladdin 个人的理解是,通俗来说,就是相当于一个方便携带且个体独立的虚 ...
- BFS 队列
Plague Inc. is a famous game, which player develop virus to ruin the world. JSZKC wants to model thi ...
- P2212 [USACO14MAR]浇地Watering the Fields
P2212 [USACO14MAR]浇地Watering the Fields 题目描述 Due to a lack of rain, Farmer John wants to build an ir ...
- Flexbox布局模式的理解
个人博客地址: 雨中的鱼-前端知识分享 http://www.showhtml5.cc 分享干货,有兴趣的人可以一起来分享前端知识 加Q群:440279380 Flexbox,一种C ...
- TFTP & commons-net-3.3.jar
项目需求:上传文件到服务器,TFTP 了解TFTP http://wenku.baidu.com/link?url=MhRVgIySotFMkm5ar6B71zROPMoqC7cd5cSbKJo2kx ...
- 基于jersey和Apache Tomcat构建Restful Web服务(二)
基于jersey和Apache Tomcat构建Restful Web服务(二) 上篇博客介绍了REST以及Jersey并使用其搭建了一个简单的“Hello World”,那么本次呢,再来点有趣的东西 ...
- 【APUE】Chapter5 Standard I/O Library
5.1 Introduction 这章介绍的standard I/O都是ISOC标准的.用这些standard I/O可以不用考虑一些buffer allocation.I/O optimal-siz ...
- CentOS 7 安装Nginx并实现域名转发
CentOS 7 条件 教程中的步骤需要root用户权限. 一.添加Nginx到YUM源 添加CentOS 7 Nginx yum资源库,打开终端,使用以下命令: sudo rpm -Uvh http ...
- Spring框架中ModelAndView、Model、ModelMap的区别
转自:http://blog.csdn.net/liujiakunit/article/details/51733211 1. Model Model 是一个接口, 其实现类为ExtendedMode ...