神题三连跪。。

思路特别玄妙,,首先要想到二分、、当然这种求特殊数字的题二分确实是比较好想到的

但检验似乎是nlogn、、、、似乎不如开桶暴力?,而且区间是变动的,,似乎还要枚举

所以想到这就不敢二分了。

所以这时候就需要用到一些类似分类讨论的思想,

将区间拆成三部分,左区间,中区间,右区间

中区间一定全部参与中位数的选举

左区间?选右边开始往左选

右区间?选左边开始往右选

由于不知道中位数是什么,所以选的时候没有任何方向

所以我们就可以二分了。。 设比他大的为+1,比他小的为-1

所以如果结果>0,则中位数可能还要大,否则一定比他小

所以用线段数,对每个数都要维护+-区间?  确实是这样

但如果按小到大顺序加入,每次就会变一个位置,所以就可以主席树直接表示n个数、 ←神

这样就可以做了、、

主席树打得比较少,,不过真好打 2333

注:一定要静态检查手残!

码:

#include<iostream>
#include<cstdio>
using namespace std;
#include<algorithm>
#include<map>
#define N 20005
#define zuo ch[o][0],l,mid
#define you ch[o][1],mid+1,r
map<int,int>ma;
bool yici;
int z[N*100],op,n,i,rt[N],q,ch[N*100][2],ll[N*100],ans,dui[5],rr[N*100],tot,llll,lll,rrr,rrrr,zzrr,zzzz,a,b,c;
struct la
{int v,id;
}a2[N];
bool cmp(la a,la b)
{return a.v<b.v;
}
void up(int o)
{z[o]=z[ch[o][0]]+z[ch[o][1]];rr[o]=max(rr[ch[o][1]],z[ch[o][1]]+rr[ch[o][0]]);ll[o]=max(ll[ch[o][0]],z[ch[o][0]]+ll[ch[o][1]]);
}
void jian(int o,int l,int r)
{if(l==r){z[o]=1;ll[o]=1;rr[o]=1;return;}int mid=(l+r)>>1; ch[o][0]=++tot;jian(zuo);ch[o][1]=++tot;jian(you);up(o);
}
void jia(int o,int l,int r,int last)
{if(l==r){z[o]=-1;   ll[o]=-1;rr[o]=-1;
return;}
int mid=(l+r)>>1;
if(a<=mid)
{ch[o][0]=++tot;jia(zuo,ch[last][0]);ch[o][1]=ch[last][1];
}else
{ch[o][1]=++tot;jia(you,ch[last][1]);    ch[o][0]=ch[last][0];
}up(o);
}
void cha(int o,int l,int r)
{if(a<=l&&r<=b){if(op==1){    if(yici==1) llll=rr[o],yici=0;elsellll=max(rr[o],llll+z[o]);  }if(op==2){   if(yici==2) zzzz=z[o],yici=0;elsezzzz+=z[o];  }if(op==3){if(yici==1)rrrr=zzrr+ll[o],zzrr=z[o],yici=0;
else
{rrrr=max(rrrr,zzrr+ll[o]);zzrr+=z[o];
}}return;}int mid=(l+r)>>1;if(a<=mid)cha(zuo);if(b>mid)cha(you);
}
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&a2[i].v);a2[i].id=i;      }sort(a2+1,a2+1+n,cmp);for(i=1;i<=n;i++){ma[i]=a2[i].v;}rt[1]=++tot;jian(tot,1,n);for(i=2;i<=n;i++){a=a2[i-1].id;rt[i]=++tot;jia(tot,1,n,rt[i-1]);}    scanf("%d",&q);while(q--){int l[5];scanf("%d%d%d%d",&l[1],&l[2],&l[3],&l[4]);l[1]=(ans+l[1])%n+1;l[2]=(ans+l[2])%n+1;l[3]=(ans+l[3])%n+1;l[4]=(ans+l[4])%n+1;sort(l+1,l+5);int lll=1,rrr=n+1;while(lll<rrr){int mid=(lll+rrr)>>1;llll=0;zzzz=0;rrrr=0;zzrr=0;a=l[1]; b=l[2];op=1;yici=1;cha(rt[mid],1,n);a=l[2]+1; b=l[3]-1;op=2;yici=1;                   if(a<=b)    cha(rt[mid],1,n);   a=l[3]; b=l[4];op=3; yici=1;                cha(rt[mid],1,n);   if(llll+zzzz+rrrr>=0)lll=mid+1,ans=ma[mid];else rrr=mid;}printf("%d\n",ans);    }
}

2017.9.22 middle 失败总结相关推荐

  1. 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术

    来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...

  2. kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题

    这篇文章是针对2020年下载安装的kali系统碰到的关于 iptables开放22端口失败等一系列问题的解决办法,如果是其它系统,可以借鉴一下思路. 各种报错: # sudo systemctl st ...

  3. 绵阳市等市州2008年《四川省抗震加固工程计价定额》人工费调整的批复〔2017〕22

    四川省建设工程造价管理总站 川建价发[2017]22号 四川省建设工程造价管理总站 关于对绵阳市等4个市.州2008年<四川省房屋建筑抗震加固工程计价定额>人工费调整的批复 各有关市.州工 ...

  4. 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

    找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...

  5. 2017第22届中国国际厨房、卫浴设施展览会会刊(参展商名录)

    2017第22届中国国际厨房.卫浴设施展览会会刊(参展商名录) 展会名称: 2017年第22届中国国际厨房.卫浴设施展览会 所属展馆: 上海新国际博览中心 开展时间: 2017-05-31 至 06- ...

  6. 2017.10.22 最多的方案 失败总结

    老想着数表结合的方法,,结果就是找不到规律. 这个题看起来好像是一个函数就可以做,但其实不是的,斐波那契函数有很好的形势:f[i]=f[i-1]+f[i-2], 他可以看成两个点转移到一个点,也可以看 ...

  7. 2017.10.22 诸神眷顾的幻想乡 失败总结

    这个题有一个比较提示性的条件:叶子节点只有20个,点数总共是100000,那显然是要100000*20级别的效率 所以就考虑对叶子节点进行处理,首先要把树上的链拆成子串,所以就不会了.. 可以试图利用 ...

  8. 2017.10.22 方格染色 失败总结

    详细题解网上有好多.. 一开始想用一个并查集维护  确定关系 一个并查集维护相等关系 但会出现一些无解判不出来(原因未知) 所以就只能写加权并查集,记录每个点和他根节点的相等关系:0相等 1不等 然后 ...

  9. 2017.9.22 小约翰的游戏John 失败总结

    第一次正式接触anti-sg.. 惨到暴力都不会. 这里的胜负条件相反不是简单地将胜负取反,它的胜负局面的判断是不一样的. 所以如果第一次碰到这种题就手玩找规律吧,,毕竟这可以说是一个结论题: 如果s ...

最新文章

  1. linux i3wm性能,Core i3-530集成显卡Linux性能考察
  2. setactive隐藏之后无法显示_WPS表格:如何显示和隐藏顶部工具栏?
  3. webpack的四个核心概念
  4. C++读取txt中数据的两种方法
  5. iPhone开发之BASE64加密和解密
  6. 工质热物理性质计算程序的编制及应用_新能源动力电池热管理方案设计和热流体仿真...
  7. 王道408数据结构——第一章 绪论
  8. Virtual Machine Manager 2012 R2利用服务模板部署SQL
  9. mysql5.7 解压版 中文乱码_MySQL 5.7解压版安装、卸载及乱码问题的图文解决方法...
  10. CC2530串口通信
  11. 第二章:用Python对不同的商品销售数据进行预测分析
  12. Flash Cs4 安装之后打不开
  13. 平面设计中的网格系统pdf_一本好书 | 排版圣经:设计中的网格系统
  14. 【大数据面试宝典】 第一篇 Hadoop 面试题
  15. 如何修改网易邮箱大师电脑端的消息提示音?超简单
  16. Android back按键基础开发
  17. ensp报错AR40,无法修改IP地址解决办法。
  18. 第一次ACM校赛_记录
  19. 【科创人】慧安金科马宇翔:人生级决策总会选择有趣的选项,如今最在意平衡的生活...
  20. 纳什均衡(Nash equilibrium)

热门文章

  1. Android笔记 style样式
  2. TikZ学习笔记(三)图形的标记与交点
  3. 代数学笔记11: 分圆域,分圆多项式,求解17次方程
  4. 使用CLion配置第一个FLTK界面
  5. (组合数学笔记)Pólya计数理论_Part.10_Pólya定理的推广——De Bruijn定理的母函数形式
  6. 【pytorch】torch.cat()函数
  7. Spark GraphX相关使用方法
  8. arduino机器人设计与制作_百元搭建人工智能自主导航机器人
  9. 【项目调研+论文阅读】基于医学文献的实体抽取(NER)方法研究 day5
  10. 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)