[bzoj5462]新家
先离线,将询问按照时间排序,维护商店出现和消失
对于每一个询问,先二分枚举答案,假设是ans,
即要求对于区间[l-ans,l+ans],商店的种类数是k(l是询问的位置)
(当然需要先将所有位置离散一下,l-ans和l+ans找到等价的位置)
那个条件并不是很好处理,但可以转化成另一个条件:
l+ans以后的每一个商店的前驱(上一个同类型商店)都不在l-ans之前
,只需要快速求前驱和前驱的最小值就可以了,可以套数据结构
具体来说,就是维护一个线段树和一个set,分别表示:
1.商店前驱的线段树(离散,维护区间min);2.每一种类型的set(查找前驱)
(但因为这个前驱需要支持删除,线段树的叶子节点还要开一个set)
这样的复杂度是o(nlog^2n),但可以直接在线段树上二分:
线段树上二分的是l+ans(二分出来的结果再减掉ans就行了),设
答案是k,答案合法当且仅当k+k的后缀最小值<=2l(l是询问位置)
,而后缀最小值可以在递归下来的时候不断维护,因此可行
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 300005
4 #define mid (l+r>>1)
5 #define oo 0x3f3f3f3f
6 struct ji{
7 int x,k,t,p;
8 bool operator < (const ji &a)const{
9 return (t<a.t)||(t==a.t)&&(p>a.p);
10 }
11 }a[N*3];
12 map<int,int>mat;
13 multiset<int>s1[N],s2[N];
14 multiset<int>::iterator it1,it2;
15 int V,VV,n,m,k,q,r,ans[N],f[N*30],ls[N*30],rs[N*30];
16 void read(){
17 for(int i=1;i<=n;i++){
18 m++;
19 scanf("%d%d%d",&a[m].x,&a[m].k,&a[m].t);
20 a[m++].p=1;
21 a[m]=a[m-1];
22 scanf("%d",&a[m].t);
23 a[m].p=-1;
24 }
25 for(int i=1;i<=q;i++){
26 m++;
27 scanf("%d%d",&a[m].x,&a[m].t);
28 a[m].k=i;
29 }
30 sort(a+1,a+m+1);
31 }
32 void update(int &k,int l,int r,int x,int y,int z){
33 if (!k)k=++V;
34 if (l==r){
35 if (!mat[l])mat[l]=++VV;
36 l=mat[l];
37 if (y)s2[l].insert(y);
38 if (z)s2[l].erase(s2[l].lower_bound(z));
39 if (!s2[l].size())f[k]=oo;
40 else f[k]=*s2[l].begin();
41 return;
42 }
43 if (x<=mid)update(ls[k],l,mid,x,y,z);
44 else update(rs[k],mid+1,r,x,y,z);
45 f[k]=min(f[ls[k]],f[rs[k]]);
46 }
47 int query(int k,int l,int r,int x,int y){
48 if (l==r)
49 if (l==oo)return -1;
50 else return l-x;
51 if ((mid<x)||(mid+min(y,f[rs[k]])<2*x))return query(rs[k],mid+1,r,x,y);
52 return query(ls[k],l,mid,x,min(y,f[rs[k]]));
53 }
54 void add(int x,int k){
55 it1=s1[k].upper_bound(x);
56 it2=it1--;
57 update(r,1,oo,x,*it1,0);
58 update(r,1,oo,*it2,x,*it1);
59 s1[k].insert(x);
60 }
61 void del(int x,int k){
62 s1[k].erase(s1[k].lower_bound(x));
63 it1=s1[k].upper_bound(x);
64 it2=it1--;
65 update(r,1,oo,x,0,*it1);
66 update(r,1,oo,*it2,*it1,x);
67 }
68 int main(){
69 scanf("%d%d%d",&n,&k,&q);
70 read();
71 f[0]=oo;
72 for(int i=1;i<=k;i++){
73 s1[i].insert(-oo);
74 s1[i].insert(oo);
75 update(r,1,oo,oo,-oo,0);
76 }
77 for(int i=1;i<=m;i++){
78 if (a[i].p>0)add(a[i].x,a[i].k);
79 if (a[i].p<0)del(a[i].x,a[i].k);
80 if (!a[i].p)ans[a[i].k]=query(r,1,oo,a[i].x,oo);
81 }
82 for(int i=1;i<=q;i++)printf("%d\n",ans[i]);
83 }
[bzoj5462]新家的更多相关文章
- 此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist
此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist
- BZOJ 3631 【JLOI2014】 松鼠的新家
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...
- 【BZOJ-3631】松鼠的新家 树形DP?+ 倍增LCA + 打标记
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1231 Solved: 620[Submit][Stat ...
- 【bzoj3631】[JLOI2014]松鼠的新家
题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松 ...
- 【BZOJ3631】松树的新家 树链剖分
BZOJ3631 松树的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- BZOJ 3631: [JLOI2014]松鼠的新家( 树链剖分 )
裸树链剖分... ------------------------------------------------------------------- #include<bits/stdc++ ...
- 3631: [JLOI2014]松鼠的新家
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 707 Solved: 342[Submit][Statu ...
- [填坑]树上差分 例题:[JLOI2014]松鼠的新家(LCA)
今天算是把LCA这个坑填上了一点点,又复习(其实是预习)了一下树上差分.其实普通的差分我还是会的,树上的嘛,也是懂原理的就是没怎么打过. 我们先来把树上差分能做到的看一下: 1.找所有路径公共覆盖的边 ...
- [JLOI2014] 松鼠的新家
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...
随机推荐
- 安全通信协议SSH应用与分析
一.实验简介: 本次实验属于安全协议应用与分析系列 二 实验环境: Windows server 2003 server windows xp 做client 三.实验目的 通过该实验了解SSH服务器 ...
- ECMA 2022 (es13) 新特性
本文主要整理了截至到 2021年10月12日 为止的且处于 Stage 3->Stage 4 阶段的ECMA提案. 主要包括: Class Fields RegExp Match Indices ...
- 国内首篇云厂商 Serverless 论文入选全球顶会:突发流量下,如何加速容器启动?
作者 | 王骜 来源 | Serverless 公众号 导读 USENIX ATC (USENIX Annual Technical Conference) 学术会议是计算机系统领域的顶级会议,入 ...
- Knativa 基于流量的灰度发布和自动弹性实践
作者 | 李鹏(元毅) 来源 | Serverless 公众号 一.Knative Knative 提供了基于流量的自动扩缩容能力,可以根据应用的请求量,在高峰时自动扩容实例数:当请求量减少以后,自动 ...
- 蝉知CMS 7.X XSS漏洞复现
个人博客地址:xzajyjs.cn 作为一个开源的企业门户系统(EPS), 企业可以非常方便地搭建一个专业的企业营销网站,进行宣传,开展业务,服务客户.蝉知系统内置了文章.产品.论坛.评论.会员.博客 ...
- python socket zmq
本篇博客将介绍zmq应答模式,所谓应答模式,就是一问一答,规则有这么几条 1. 必须先提问,后回答 2. 对于一个提问,只能回答一次 3. 在没有收到回答前不能再次提问 上代码,服务端: #codin ...
- javascript-jquery介绍
jquery优势 1.轻量级 2.强大的选择器 3.出色的DOM封装 4.可靠的事件处理机制 5.完善的Ajax 6.不污染顶级变量 7.出色的浏览器兼容 8.链式操作方式 9.隐式迭代 10.行为层 ...
- Hadoop面试题(四)——YARN
1.简述hadoop1与hadoop2 的架构异同 1)加入了yarn解决了资源调度的问题. 2)加入了对zookeeper的支持实现比较可靠的高可用. 2.为什么会产生 yarn,它解决了什么问题, ...
- PHP伪协议与文件包含漏洞1
PHP文件包含漏洞花样繁多,需配合代码审计. 看能否使用这类漏洞时,主要看: (1)代码中是否有include(),且参数可控: 如: (2)php.ini设置:确保 allow_url_fopen= ...
- [对对子队]Beta设计和计划
需求再分析 Alpha阶段用户反馈的问题主要有三个 新手引导部分没有明确指出合成按钮可以使用下拉框切换目标,因此不少玩家卡在第三关 觉得合成动画太长,希望可以快进或者跳过 对游戏目标很迷惑,不知道为什 ...