这个题有一种套路,就是大小关系转化成01串,这样就变成了二分检验问题,,

就是把排序变成区间修改,然后单点查询。。

把所有比他小的赋成0,比他大的赋成1

然后判断要求位是0还是1来判断答案与当前值的大小

码:

#include<iostream>
#include<cstdio>
using namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define N 100005
int bj[N<<2],sz[N<<2],op,wen,a,b,c,n,m,ans,ll[N],rr[N],aa[N],qq[N],i;
void down(int o,int l,int r)
{int ll=o<<1,rr=o<<1|1,mid=(r+l)>>1;if(bj[o]==1){bj[o]=0;bj[ll]=1;bj[rr]=1;sz[ll]=0;sz[rr]=0;      }if(bj[o]==2){bj[o]=0;bj[ll]=2;bj[rr]=2;sz[ll]=(mid-l+1);sz[rr]=(r-mid);    }
}
void up(int o)
{int ll=o<<1,rr=o<<1|1;sz[o]=sz[ll]+sz[rr];
}
void gai(int o,int l,int r)
{if(a<=l&&r<=b){if(op==0){sz[o]=c*(r-l+1);bj[o]=c+1;}else {c+=sz[o];        }return;}down(o,l,r);int mid=(l+r)>>1;if(a<=mid)gai(zuo);if(b>mid)gai(you);  up(o);
}
int main()
{scanf("%d%d",&n,&m);for(i=1;i<=n;i++){scanf("%d",&aa[i]);       }for(i=1;i<=m;i++){scanf("%d%d%d",&qq[i],&ll[i],&rr[i]);}scanf("%d",&wen);int l=1,r=n+1;while(l<r){int mid=(l+r)>>1;       for(i=1;i<=n;i++)if(aa[i]<=mid){a=i;b=i;c=0;op=0;gai(1,1,n);         }else{a=i;b=i;c=1;op=0;gai(1,1,n);  }for(i=1;i<=m;i++){c=0;op=1;a=ll[i],b=rr[i];gai(1,1,n);int lin=c;op=0;if(qq[i]==0){c=1; a=rr[i]-lin+1;b=rr[i];if(a<=b)gai(1,1,n);c=0;   a=ll[i];b=rr[i]-lin;if(a<=b)gai(1,1,n);               }else{c=1; a=ll[i];b=ll[i]+lin-1;if(a<=b)gai(1,1,n);        c=0;   a=ll[i]+lin;b=rr[i];if(a<=b)gai(1,1,n);  }       }op=1;c=0;a=b=wen;gai(1,1,n);if(c==0){ans=mid,r=mid;}else l=mid+1;}
printf("%d",ans);
}

2017.10.28 排序 思考记录相关推荐

  1. 2017.10.28 压缩 思考记录

    这个题首先要知道M和R不是栈的搭配,是贪心的搭配,,就是向左找到第一个M.. 如 abababab cdcdcdcd abababab cdcdcdcd   = abRRcdcdcdcdR != Ma ...

  2. 2017.10.6 单词 思考记录

    少有的会做的ac自动机题 .这个题是匹配模式串. 所以就不需要匹配的过程,只需要建出fail树,然后直接拓扑 由于每次加进去一个单词,这个单词的每一个字母都有可能作为最后一个字母影响他的失配,所以词路 ...

  3. 2017.10.5 高速公路 思考记录

    ..一开始死活不知道样例8/3是怎么算出来的.. 后来才发现右端点要-1.. 这个题说是期望,但因为每个点的概率相同,所以直接求和然后除就可以了 维护每个区间的答案,听说直接维护答案很难写,,感觉还可 ...

  4. 2017.10.1 蚯蚓 思考记录

    现在看来这个题真心不难. 如果能保证一个从大到小的顺序的话,对所有的数依次进行相同比例的分裂操作,左右两边一定也是单调的 由于每次要+q,等价于取出元素-q,这在式子里是不影响大小关系的 所以就sor ...

  5. 2017.9.28 产品加工 思考记录

    很早之前做的了.发现bzoj上竟然没提交过 于是又重推了一遍 首先这个ti<=5是用来让n^2的复杂度降一降的, 然后就考虑装每个物品之后各个机器的耗时,同时,对于一个A机器的耗时,可能会有多个 ...

  6. 2017.9.28 降雨量 思考记录

    论逻辑清晰的重要性. 首先大小的关系明摆着是要你建一颗线段树 然后就可以分类讨论了 x没有 y有 x有 y没有 x没有 y没有 x有 y有 对于都没有的情况  只可能是maybe 对于一个没有的情况, ...

  7. 2017.7.28 愤怒的小鸟 思考记录

    现在来看,这个noip的状压dp就不是很难了 先枚举抛物线(一个确定的,两个确定的) 再对每个抛物线枚举目标,把能打的压在一起 最后扫一遍抛物线,枚举状态出最优解即可 注意此题精度!设成0.00005 ...

  8. 2017.9.10 连续攻击游戏 思考记录

    这个题..可以把它当成结论题搞, 结论就是对于每个数字的出现次数,如果区间1~n内的出现次数都>=2,那么这个区间1~n内都会合法 这个结论很好证明,连到外面可以视为停止   外面连进来的可以视 ...

  9. 2017.10.10 杀人游戏 思考记录

    这个题题目描述还是有一点问题..这里的知道关系是有传递性的.第一次理解成只会明白直接相连的,最小点覆盖  --   这样就成np了吧.. 所以就比较显然了,,对于每组能互达的强连通分量,都只需一个头上 ...

最新文章

  1. Taurus.MVC 2.0 开源发布:WebAPI开发教程
  2. 基于Springboot实现仿百度网盘开发
  3. SQLite.NET提供程序的选择
  4. UA MATH571B 试验设计III 单因素试验设计3
  5. boost::gil::view_is_basic用法的测试程序
  6. Hive元数据信息表详解
  7. ajax改变div内容,jquery ajax双击div可直接修改div中的内容
  8. the android emulator process,Android studio报错:The emulator process for AVD (xxx) was killed
  9. QNAP 威联通 NAS的个人使用经验 篇三:#剁主计划-西安# 时隔3年,NAS使用须知
  10. 开发转测试的面试总结
  11. 「分布式系统之美」知乎圆桌精选大放送第二期|不要放过任何你感兴趣的话题
  12. 交叉编译使用 hostapd-2.0 在开发板上开机自启动无线网卡 AP 功能
  13. AD20 PCB导出Gerber、拼板,华秋DFM一键拼板,同理支持其他PCB EDA软件的Gerber导入与拼板
  14. Solid Sphere Inc.:智能手机原创恶搞App“Takeshobo Quest - POP TEAM EPIC ASSAULTS”
  15. div默认外边距是多少_CSS外边距
  16. Git是什么?如何用?
  17. 计算机考研容易的985211学校,全国211院校考研难度分析,建议收藏!(详细版)...
  18. python卸载opencv包_Ubuntu下安装与卸载opencv模块
  19. PLS-DA中的LV(潜在变量)数量
  20. 如果你喜欢的女孩有了男朋友,但她男朋友比你差很多,怎么办?

热门文章

  1. c#split方法拆分为数据_【转载】C#使用Split函数根据特定分隔符分割字符串
  2. Kotlin学习笔记 第二章 类与对象 第五节 可见性 第六节 扩展
  3. 基于Matlab的跨孔CT胖射线追踪算法(三)
  4. java运行多个linux命令_在shell的一行中运行多个命令
  5. Windows 10 + anaconda3快速配置tensorflow-gpu开发环境
  6. ubuntu安装常用软件(比如python、搜狗拼音、cudnn等)
  7. WORD如何比较原文档和别人修改过的文档?
  8. day28 java的IO流 (1)对IO的初步了解
  9. java foreach6_Java foreach循环是否会创建一个新对象?
  10. bottleneck resnet网络_深度学习|图像分类:ResNet(二)