2017.9.22 middle 失败总结
神题三连跪。。
思路特别玄妙,,首先要想到二分、、当然这种求特殊数字的题二分确实是比较好想到的
但检验似乎是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 失败总结相关推荐
- 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术
来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...
- kali里PHP文件502错误,解决Linux Kali iptables开放22端口失败等一系列问题
这篇文章是针对2020年下载安装的kali系统碰到的关于 iptables开放22端口失败等一系列问题的解决办法,如果是其它系统,可以借鉴一下思路. 各种报错: # sudo systemctl st ...
- 绵阳市等市州2008年《四川省抗震加固工程计价定额》人工费调整的批复〔2017〕22
四川省建设工程造价管理总站 川建价发[2017]22号 四川省建设工程造价管理总站 关于对绵阳市等4个市.州2008年<四川省房屋建筑抗震加固工程计价定额>人工费调整的批复 各有关市.州工 ...
- 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决
找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...
- 2017第22届中国国际厨房、卫浴设施展览会会刊(参展商名录)
2017第22届中国国际厨房.卫浴设施展览会会刊(参展商名录) 展会名称: 2017年第22届中国国际厨房.卫浴设施展览会 所属展馆: 上海新国际博览中心 开展时间: 2017-05-31 至 06- ...
- 2017.10.22 最多的方案 失败总结
老想着数表结合的方法,,结果就是找不到规律. 这个题看起来好像是一个函数就可以做,但其实不是的,斐波那契函数有很好的形势:f[i]=f[i-1]+f[i-2], 他可以看成两个点转移到一个点,也可以看 ...
- 2017.10.22 诸神眷顾的幻想乡 失败总结
这个题有一个比较提示性的条件:叶子节点只有20个,点数总共是100000,那显然是要100000*20级别的效率 所以就考虑对叶子节点进行处理,首先要把树上的链拆成子串,所以就不会了.. 可以试图利用 ...
- 2017.10.22 方格染色 失败总结
详细题解网上有好多.. 一开始想用一个并查集维护 确定关系 一个并查集维护相等关系 但会出现一些无解判不出来(原因未知) 所以就只能写加权并查集,记录每个点和他根节点的相等关系:0相等 1不等 然后 ...
- 2017.9.22 小约翰的游戏John 失败总结
第一次正式接触anti-sg.. 惨到暴力都不会. 这里的胜负条件相反不是简单地将胜负取反,它的胜负局面的判断是不一样的. 所以如果第一次碰到这种题就手玩找规律吧,,毕竟这可以说是一个结论题: 如果s ...
最新文章
- linux i3wm性能,Core i3-530集成显卡Linux性能考察
- setactive隐藏之后无法显示_WPS表格:如何显示和隐藏顶部工具栏?
- webpack的四个核心概念
- C++读取txt中数据的两种方法
- iPhone开发之BASE64加密和解密
- 工质热物理性质计算程序的编制及应用_新能源动力电池热管理方案设计和热流体仿真...
- 王道408数据结构——第一章 绪论
- Virtual Machine Manager 2012 R2利用服务模板部署SQL
- mysql5.7 解压版 中文乱码_MySQL 5.7解压版安装、卸载及乱码问题的图文解决方法...
- CC2530串口通信
- 第二章:用Python对不同的商品销售数据进行预测分析
- Flash Cs4 安装之后打不开
- 平面设计中的网格系统pdf_一本好书 | 排版圣经:设计中的网格系统
- 【大数据面试宝典】 第一篇 Hadoop 面试题
- 如何修改网易邮箱大师电脑端的消息提示音?超简单
- Android back按键基础开发
- ensp报错AR40,无法修改IP地址解决办法。
- 第一次ACM校赛_记录
- 【科创人】慧安金科马宇翔:人生级决策总会选择有趣的选项,如今最在意平衡的生活...
- 纳什均衡(Nash equilibrium)
热门文章
- Android笔记 style样式
- TikZ学习笔记(三)图形的标记与交点
- 代数学笔记11: 分圆域,分圆多项式,求解17次方程
- 使用CLion配置第一个FLTK界面
- (组合数学笔记)Pólya计数理论_Part.10_Pólya定理的推广——De Bruijn定理的母函数形式
- 【pytorch】torch.cat()函数
- Spark GraphX相关使用方法
- arduino机器人设计与制作_百元搭建人工智能自主导航机器人
- 【项目调研+论文阅读】基于医学文献的实体抽取(NER)方法研究 day5
- 一棵二叉树的中根线索二叉树_二叉树面试题刷题模板(终极版)