博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
p2824 [HEOI2016/TJOI2016]排序
阅读量:6972 次
发布时间:2019-06-27

本文共 1912 字,大约阅读时间需要 6 分钟。

分析

二分一个数表示查询位置的数是多少,将序列中大于等于这个数的数赋为1,其余赋为0,对于每一个区间查询区间和(即区间内1的个数),然后区间修改将前/后半部分修改为1,其余修改为0即可

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;int a[100100],d[400400],col[400400],k[100100],x[100100],y[100100];inline void update(int le,int ri,int wh,int pl,int sum){ col[wh]=-1; if(le==ri){ d[wh]=sum; return; } int mid=(le+ri)>>1; if(mid>=pl)update(le,mid,wh<<1,pl,sum); else update(mid+1,ri,wh<<1|1,pl,sum); d[wh]=d[wh<<1]+d[wh<<1|1]; return;}inline void build(int le,int ri,int wh,int X,int Y,int sum){ if(le>=X&&ri<=Y){ col[wh]=sum; d[wh]=(ri-le+1)*sum; return; } int mid=(le+ri)>>1; if(col[wh]!=-1){ col[wh<<1]=col[wh<<1|1]=col[wh]; d[wh<<1]=col[wh]*(mid-le+1); d[wh<<1|1]=col[wh]*(ri-mid); col[wh]=-1; } if(mid>=X)build(le,mid,wh<<1,X,Y,sum); if(mid
<<1|1,X,Y,sum); d[wh]=d[wh<<1]+d[wh<<1|1]; return;}inline int q(int le,int ri,int wh,int X,int Y){ if(le>=X&&ri<=Y)return d[wh]; int mid=(le+ri)>>1,ans=0; if(col[wh]!=-1){ col[wh<<1]=col[wh<<1|1]=col[wh]; d[wh<<1]=col[wh]*(mid-le+1); d[wh<<1|1]=col[wh]*(ri-mid); col[wh]=-1; } if(mid>=X)ans+=q(le,mid,wh<<1,X,Y); if(mid
<<1|1,X,Y); d[wh]=d[wh<<1]+d[wh<<1|1]; return ans;}int main(){ int n,m,i,j,l,r,pos; scanf("%d%d",&n,&m); for(i=1;i<=n;i++)scanf("%d",&a[i]); for(i=1;i<=m;i++)scanf("%d%d%d",&k[i],&x[i],&y[i]); scanf("%d",&pos); l=1,r=n+1; while(r-l>1){ int mid=(l+r)>>1; for(i=1;i<=n;i++) update(1,n,1,i,(a[i]>=mid)); for(i=1;i<=m;i++){ int sum=q(1,n,1,x[i],y[i]); if(k[i]){ build(1,n,1,x[i],x[i]+sum-1,1); build(1,n,1,x[i]+sum,y[i],0); }else { build(1,n,1,x[i],y[i]-sum,0); build(1,n,1,y[i]-sum+1,y[i],1); } } if(q(1,n,1,pos,pos))l=mid; else r=mid; } printf("%d\n",l); return 0;}

转载于:https://www.cnblogs.com/yzxverygood/p/9751008.html

你可能感兴趣的文章
Leetcode: LFU Cache && Summary of various Sets: HashSet, TreeSet, LinkedHashSet
查看>>
JAVA数据结构--队列
查看>>
[zz]配置RHEL6使用CentOS6的yum源
查看>>
linux debug : addr2line追踪出错地址
查看>>
oracle 好书( 09 对象管理 )
查看>>
网站是否有播放音乐功能
查看>>
架构设计:远程调用服务架构设计及zookeeper技术详解(上篇)
查看>>
web开发中的 emmet 效率提升工具
查看>>
41、java与mysql乱码的问题
查看>>
细说 Form (表单)
查看>>
在Web应用和IntelliJ IDEA中使用Spring框架
查看>>
用缓动函数模拟物理动画
查看>>
MongoDB索引相关文章-摘自网络
查看>>
RBAC权限设计图 [转]
查看>>
2017Windows下安装pip
查看>>
用JAVA发送一个XML格式的HTTP请求
查看>>
GraphicsStatsService之2 UI绘制的时间信息来源
查看>>
深入理解Hystrix之文档翻译
查看>>
[译]官方图解:Chrome 快是有原因的,现代浏览器的多进程架构!(Part 1)
查看>>
java 知识点
查看>>