BZOJ 4552: [Tjoi2016&Heoi2016]排序
2016-05-20 15:49
429 查看
BC #76
这题目好鏼啊!
(我也不知道怎么就满足二分性了)
这题目好鏼啊!
(我也不知道怎么就满足二分性了)
#include<cstdio> #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<vector> #include<algorithm> #include<map> #include<set> #define rep(i,l,r) for(int i=l;i<=r;i++) #define per(i,r,l) for(int i=r;i>=l;i--) #define mmt(a,v) memset(a,v,sizeof(a)) #define tra(i,u) for(int i=head[u];i;i=e[i].next) using namespace std; const int N=100000+5; struct Node{ int l,r,sum,set; }tr[N<<2]; #define lc o<<1 #define rc o<<1|1 void pushup(int o){ tr[o].sum=tr[lc].sum+tr[rc].sum; } void pushdown(int o){ if(tr[o].set!=-1){ tr[lc].set=tr[rc].set=tr[o].set; tr[lc].sum=(tr[lc].r-tr[lc].l+1)*tr[o].set; tr[rc].sum=(tr[rc].r-tr[rc].l+1)*tr[o].set; tr[o].set=-1; } } void update(int o,int a,int b,int f){ int l=tr[o].l,r=tr[o].r; if(l==a&&b==r) tr[o].sum=(r-l+1)*f,tr[o].set=f; else{ pushdown(o); int mid=l+r>>1; if(b<=mid)update(lc,a,b,f); else if(mid<a)update(rc,a,b,f); else update(lc,a,mid,f),update(rc,mid+1,b,f); pushup(o); } } int query(int o,int a,int b){ int l=tr[o].l,r=tr[o].r; if(l==a&&b==r)return tr[o].sum; else{ pushdown(o); int mid=l+r>>1; if(b<=mid)return query(lc,a,b); else if(mid<a)return query(rc,a,b); else return query(lc,a,mid)+query(rc,mid+1,b); } } int a ; void build(int o,int l,int r,int x){ tr[o].l=l;tr[o].r=r;tr[o].set=-1; if(l==r)tr[o].sum=(a[l]>x); else{ int mid=l+r>>1; build(lc,l,mid,x);build(rc,mid+1,r,x); pushup(o); } } struct Opt{ int k,l,r; }op ; int n,m,q; int check(int x){ build(1,1,n,x); rep(i,1,m){ int l=op[i].l,r=op[i].r,s=query(1,l,r); if(op[i].k){ if(s)update(1,l,l+s-1,1); if(l+s<=r)update(1,l+s,r,0); }else{ if(s)update(1,r-s+1,r,1); if(l<=r-s)update(1,l,r-s,0); } } int ans=query(1,q,q); return ans; } int main(){ //freopen("a.in","r",stdin); scanf("%d%d",&n,&m); rep(i,1,n)scanf("%d",&a[i]); rep(i,1,m)scanf("%d%d%d",&op[i].k,&op[i].l,&op[i].r); scanf("%d",&q); int l=1,r=n; while(l<=r){ int mid=l+r>>1; if(check(mid))l=mid+1; else r=mid-1; } printf("%d\n",r+1); return 0; }
相关文章推荐
- RabbitMQ基础概念详细介绍
- storybord 中设置collectionView中cell的背景色无效
- Ubuntu安装adobe字体
- Every derived table must have its own alias
- mongodb启动
- 《梦断代码》读后笔记_4
- IE四个接口互相获取
- 实例讲解Android中的AutoCompleteTextView自动补全组件
- Proto-gen-lua 与 C# 对 Extension 的不同处理
- 【深度学习】超轻量级网络SqueezeNet算法详解
- 移植QT5.4.0到ARM开发板
- 深度好文【移动端H5页面高清多屏适配方案】
- window下生成苹果证书
- MyBatis 通过包含的jdbcType类型
- Android中如何获取应用版本号
- 菜鸟从零开始初始WebSocket -Server篇
- 向下放大,向上悬停效果
- JAXB - Annotations, Type Adapters: XmlJavaTypeAdapter
- 两个值交互位置的几种方法
- CDN技术详解笔记