BZOJ3110: [Zjoi2013]K大数查询(整体二分)

Description

有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c
如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。

Input

第一行N,M
接下来M行,每行形如1 a b c或2 a b c

Output

输出每个询问的结果

Sample Input

2 5
1 1 2 1
1 1 2 2
2 1 1 2
2 1 1 1
2 1 2 3

Sample Output

1
2
1

HINT

【样例说明】
第一个操作 后位置 1 的数只有 1 , 位置 2 的数也只有 1 。 第二个操作 后位置 1
的数有 1 、 2 ,位置 2 的数也有 1 、 2 。 第三次询问 位置 1 到位置 1 第 2 大的数 是
1 。 第四次询问 位置 1 到位置 1 第 1 大的数是 2 。 第五次询问 位置 1 到位置 2 第 3
大的数是 1 。‍

N,M<=50000,N,M<=50000
a<=b<=N
1操作中abs(c)<=N
2操作中c<=Maxlongint

解题思路:

刚开始把题目看错了,以为是区间加法差点没给我恶心死。

最后发现一个位置上可以有多个数。

那么这道题就是带修改整体二分。

将操作按时间序排序,在二分过程中不要破坏这个序。

二分答案时将操作中的K若大于mid就插入线段树。

在时间序环境下查询区间。

剩下的就是普通整体二分了。

代码:

 

  1 #include<cstdio>
  2 #include<cstring>
  3 #include<algorithm>
  4 #define lll spc<<1
  5 #define rrr spc<<1|1
  6 typedef long long lnt;
  7 const int N=1000000;
  8 struct que{
  9     bool qu;
 10     int t;
 11     int l;
 12     int r;
 13     lnt x;
 14 }q[N],sp[N],ss[N];
 15 struct trnt{
 16     lnt val;
 17     lnt lzt;
 18 }tr[N];
 19 int sek[N];
 20 int ans[N];
 21 lnt num[N];
 22 int n,m;
 23 int cnt;
 24 int tot;
 25 void Add(int spc,int l,int r,lnt v){tr[spc].val+=v*(lnt)(r-l+1);tr[spc].lzt+=v;return ;}
 26 void pushup(int spc){tr[spc].val=tr[lll].val+tr[rrr].val;return ;}
 27 void pushdown(int spc,int l,int mid,int r)
 28 {
 29     if(tr[spc].lzt)
 30     {
 31         Add(lll,l,mid,tr[spc].lzt);
 32         Add(rrr,mid+1,r,tr[spc].lzt);
 33         tr[spc].lzt=0;
 34     }
 35     return ;
 36 }
 37 void update(int l,int r,int ll,int rr,int spc,lnt v)
 38 {
 39     if(ll>r||l>rr)
 40         return ;
 41     if(ll<=l&&r<=rr)
 42     {
 43         Add(spc,l,r,v);
 44         return ;
 45     }
 46     int mid=(l+r)>>1;
 47     pushdown(spc,l,mid,r);
 48     update(l,mid,ll,rr,lll,v);
 49     update(mid+1,r,ll,rr,rrr,v);
 50     pushup(spc);
 51     return ;
 52 }
 53 lnt query(int ll,int rr,int l,int r,int spc)
 54 {
 55     if(l>rr||ll>r)
 56         return 0;
 57     if(ll<=l&&r<=rr)
 58         return tr[spc].val;
 59     int mid=(l+r)>>1;
 60     pushdown(spc,l,mid,r);
 61     return query(ll,rr,l,mid,lll)+query(ll,rr,mid+1,r,rrr);
 62 }
 63 bool cmp(que a,que b){if(a.qu!=b.qu)return b.qu;return a.x<b.x;}
 64 bool cmq(que a,que b){return a.t<b.t;}
 65 void macrs(int l,int r,int ll,int rr)
 66 {
 67     if(ll>rr)
 68         return ;
 69     if(l==r)
 70     {
 71         for(int i=ll;i<=rr;i++)
 72             if(q[i].qu)
 73                 ans[q[i].t]=l;
 74         return ;
 75     }
 76     int mid=(l+r)>>1;
 77     int sta1=0,sta2=0;
 78     for(int i=ll;i<=rr;i++)
 79     {
 80         if(q[i].qu)
 81         {
 82             lnt sum=query(q[i].l,q[i].r,1,n,1);
 83             if(q[i].x<=sum)
 84                 ss[++sta2]=q[i];
 85             else{
 86                 q[i].x-=sum;
 87                 sp[++sta1]=q[i];
 88             }
 89         }else{
 90             if(q[i].x>mid)
 91             {
 92                 update(1,n,q[i].l,q[i].r,1,1);
 93                 ss[++sta2]=q[i];
 94             }else{
 95                 sp[++sta1]=q[i];
 96             }
 97         }
 98     }
 99     for(int i=1;i<=sta2;i++)
100         if(ss[i].qu==0)
101             update(1,n,ss[i].l,ss[i].r,1,-1);
102     int sta=ll-1;
103     for(int i=1;i<=sta1;i++)
104         q[++sta]=sp[i];
105     int midl=sta;
106     for(int i=1;i<=sta2;i++)
107         q[++sta]=ss[i];
108     macrs(l,mid,ll,midl);
109     macrs(mid+1,r,midl+1,rr);
110     return ;
111 }
112 int main()
113 {
114     scanf("%d%d",&n,&m);
115     for(int i=1;i<=m;i++)
116     {
117         int cmd;
118         scanf("%d",&cmd);
119         sek[i]=cmd;
120         scanf("%d%d%lld",&q[i].l,&q[i].r,&q[i].x);
121         q[i].qu=(cmd==2);
122         q[i].t=i;
123     }
124     std::sort(q+1,q+m+1,cmp);
125     tot=1;
126     num[1]=q[1].x;
127     q[1].x=1;
128     for(int i=2;i<=m&&q[i].qu==0;i++)
129     {
130         if(q[i].x!=num[tot])
131             tot++,num[tot]=q[i].x;
132         q[i].x=tot;
133     }
134     std::sort(q+1,q+m+1,cmq);
135     macrs(1,tot,1,m);
136     for(int i=1;i<=m;i++)
137         if(sek[i]==2)
138             printf("%lld\n",num[ans[i]]);
139     return 0;
140 }

 

 

 

转载于:https://www.cnblogs.com/blog-Dr-J/p/10116110.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unhandled exception: org.springframework.beans.factory.BeanDefinitionStoreException

大家好&#xff0c;我是烤鸭&#xff1a; ​ 使用 idea 莫名其妙的错误。 无法编译 异常已经 catch 住了&#xff0c;提示明显是有问题的。 再看一下 maven install 的结果 Error:(99, 100) java: 无法访问org.springframework.core.env.EnvironmentCapable 找不到org.spr…

[css] margin和padding使用的场景有哪些?

[css] margin和padding使用的场景有哪些&#xff1f; 实现自适应的等比例矩形效果&#xff1a; div { padding: 50%; } div { padding: 25% 50%; } //宽高比为 2:1 的矩形效果实现头图高度天然等比例缩小效果 .box { padding: 10% 50%; position: relative; } .box > img {…

poj 1637 Sightseeing tour——最大流+欧拉回路

题目&#xff1a;http://poj.org/problem?id1637 先给无向边随便定向&#xff0c;如果一个点的入度大于出度&#xff0c;就从源点向它连 ( 入度 - 出度 / 2 ) 容量的边&#xff0c;意为需要流出去这么多&#xff1b;流出去1表示改了一条边的方向&#xff0c;会使自己出度-1、入…

[css] 什么是视差滚动?如何实现视差滚动的效果?

[css] 什么是视差滚动&#xff1f;如何实现视差滚动的效果&#xff1f; 什么是视差滚动&#xff1a; 就是在同一视角下&#xff0c;鼠标或者页面滚动时&#xff0c;不同元素以不同的速率跟随滚动&#xff0c;产生生动的效果。 如何实现视差滚动&#xff1a; 根据页面滚动高度的…

springcloud gateway 源码解析、请求响应流程、第三方响应结果在 gateway 的经过

大家好&#xff0c;我是烤鸭&#xff1a; 1. 官方介绍 官方文档&#xff1a; 看的是 2.2.5.RELEASE 版本的 https://docs.spring.io/spring-cloud-gateway/docs/2.2.5.RELEASE/reference/html/ 看一下官方这段说明&#xff0c;gateway 使用的是 webflux 和 reactor&#x…

beetl的使用感受

beetl 的用法&#xff0c;跟layui的laytpl的模版语言差不多。写的很舒服。没有thymeleaf那么麻烦。例如 <%for(loadDischargItem in loadDischargItemList){ %><tr><td>${loadDischargItemLP.index}</td><td><input type"text" id&…

[css] css3的:nth-child和:nth-of-type的区别是什么?

[css] css3的:nth-child和:nth-of-type的区别是什么&#xff1f; :nth-child(n) 选择器匹配属于其父元素的第 N 个子元素&#xff0c;不论元素的类型。 :nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素。 n 可以是数字、关键词或公式。个人简介 我是歌谣&…

改logback logstash-logback-encoder 框架本身的日志级别

大家好&#xff0c;我是烤鸭&#xff1a; 最近遇到一个问题&#xff0c;想把logback框架本身的日志级别修改&#xff0c;需要 logstash-logback-encoder 6.1 以上的版本才可以。 直接上代码 这里修改的不是业务日志级别&#xff0c;是 logback 框架本身(确切地说是 logstash…

idea首次创建新模块的详细操作

依赖网址:https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api/3.1.0 https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api/2.3.1 https://mvnrepository.com/artifact/org.springframework/spring-webmvc 创建文件夹 修改版本号 配…

[css] 怎么使用自定义字体?有什么注意事项?

[css] 怎么使用自定义字体&#xff1f;有什么注意事项&#xff1f; font-face { font-family: 自定义字体名称; src: url(字体文件名.eot); /* IE9 Compat Modes / src: url(字体文件名.eot?#iefix) format(embedded-opentype), / IE6-IE8 / url(字体文件名.woff) format(wof…

markdown 常用语法总结 - 个人版

这里并不是要总结所有的 markdown 语法&#xff0c;只是总结笔者自己撰写博客时常用的一些 markdown 语法。 1 图片设置 1.1 设置图片位置 利用markdown在编写文档时插入图片是默认靠左&#xff0c;有些时候将图片设置为居中时可以更加的美观&#xff0c;这时就需要在图片的信息…

[css] 要是position跟display、overflow、float这些特性相互叠加后会怎么样?

[css] 要是position跟display、overflow、float这些特性相互叠加后会怎么样&#xff1f; display:none之后别的样式设置成什么都不管用了&#xff0c;dom元素不可见了。position:absolute之后float应该就不起作用了个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识…

logback AbstractLogstashTcpSocketAppender 源码解析

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享下 logback 源码 &#xff0c;版本是 6.5-SNAPSHOT。 写这篇的目的 由于最近项目中一直出现这个日志&#xff0c;而且基本每20秒就会打印一次&#xff0c;也没法关掉&#xff0c;百度上资料也很少&#xff0c;只能自己来了。 …

PostgreSQL 、springboot 、spring data jpa 集成

项目地址&#xff1a;https://gitee.com/zhxs_code/PostgreSQL_springboot_jpa_demo.git 增删查改都已经实现。 重点部分&#xff1a; 1.定义自己的方言。 1 package com.zxl.postgrespringdemo.config.dialect;2 3 import org.hibernate.dialect.PostgreSQL94Dialect;4 import…

[css] 有用过Flex吗?简要说下你对它的了解

[css] 有用过Flex吗&#xff1f;简要说下你对它的了解 给我感触最深的只有两点方便/好用子元素超出的bug关于bug, 大家有什么好的解决方案, 除了overflow: hidden个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大…

RedisTemplate value序列化导致的问题

大家好&#xff0c;我是烤鸭&#xff1a; ​ 今天分享一个redisTemplate 使用时&#xff0c;value 序列化的问题。 1. 问题描述 其实我最开始遇到的问题是&#xff1a; stringRedisTemplate.opsForSet().isMember(key,value)一直返回false问题&#xff0c;下边博客给出了…

41、OrthoMCL和mcl软件进行基因家族分析

转载&#xff1a;http://www.realbio.cn/news/124.html https://blog.csdn.net/seallama/article/details/43820763 http://www.cnblogs.com/huangying78/p/8638506.html 1. 数据库的配置 OrthoMCL的分析需要先行建立mysql账户并建立相应的数据库。关于mysql用户的创建我们不在…

[css] 如何实现换肤功能?

[css] 如何实现换肤功能&#xff1f; css 换肤常见方案 是通过 less/sass/postcss 等css 预处理器&#xff0c;通过它们自身的变量用法&#xff0c;设置不同变量&#xff0c;生成不同的主题样式&#xff0c;但是这些样式都是会被打包成常量&#xff0c;我们只能在编译之前修改…

beego——模板处理

beego的模板处理引擎采用的是Go内置的html/template包进行处理&#xff0c;而且beego的模板处理逻辑是采用了缓存编译方式&#xff0c; 也就是所有的模板会在beego应用启动的时候全部编译然后缓存在map里面。 1.模板目录 beego中默认的模板目录是views&#xff0c;用户可以把模…

日志 中文乱码、nacos 中文乱码、saltstack 中文乱码、docker中文乱码

大家好&#xff0c;我是烤鸭&#xff1a; ​ 今天分享一个 saltstack 中文乱码 的问题。 问题说明 由于项目之前没有接入公司的发布系统&#xff0c;今天接入之后发现日志乱码&#xff0c;不仅如此&#xff0c;从nacos获取到的中文参数也是乱码。于是猜想是发布系统遗留了一…