先离线,将询问按照时间排序,维护商店出现和消失

对于每一个询问,先二分枚举答案,假设是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]新家的更多相关文章

  1. 此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist

    此博客主人已搬家访问新家地址:http://write.blog.csdn.net/postlist

  2. BZOJ 3631 【JLOI2014】 松鼠的新家

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...

  3. 【BZOJ-3631】松鼠的新家 树形DP?+ 倍增LCA + 打标记

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1231  Solved: 620[Submit][Stat ...

  4. 【bzoj3631】[JLOI2014]松鼠的新家

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树"上.松 ...

  5. 【BZOJ3631】松树的新家 树链剖分

    BZOJ3631 松树的新家 Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

  6. BZOJ 3631: [JLOI2014]松鼠的新家( 树链剖分 )

    裸树链剖分... ------------------------------------------------------------------- #include<bits/stdc++ ...

  7. 3631: [JLOI2014]松鼠的新家

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 707  Solved: 342[Submit][Statu ...

  8. [填坑]树上差分 例题:[JLOI2014]松鼠的新家(LCA)

    今天算是把LCA这个坑填上了一点点,又复习(其实是预习)了一下树上差分.其实普通的差分我还是会的,树上的嘛,也是懂原理的就是没怎么打过. 我们先来把树上差分能做到的看一下: 1.找所有路径公共覆盖的边 ...

  9. [JLOI2014] 松鼠的新家

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...

随机推荐

  1. RabbitMQ的消息可靠性(五)

    一.可靠性问题分析 消息的可靠性投递是使用消息中间件不可避免的问题,不管是使用哪种MQ都存在这种问题,接下来要说的就是在RabbitMQ中如何解决可靠性问题:在前面 在前面说过消息的传递过程中有三个对 ...

  2. Spring的JDK动态代理如何实现的(源码解析)

    前言 上一篇文章中提到了SpringAOP是如何决断使用哪种动态代理方式的,本文接上文讲解SpringAOP的JDK动态代理是如何实现的.SpringAOP的实现其实也是使用了Proxy和Invoca ...

  3. Python 3.10 正式发布,新增模式匹配,同事用了直呼真香!

    关注微信公众号:K哥爬虫,QQ交流群:808574309,持续分享爬虫进阶.JS/安卓逆向等技术干货! 前几天,也就是 10 月 4 日,Python 发布了 3.10.0 版本,什么?3.9 之后居 ...

  4. 苹果的最新MacbookPro,炸到你了么?

    一 苹果秋季发布会如期而至.我不是一个标准的果粉.但是我今年用上了macbook pro m1,最期待的就是新款的搭载了M1X的Macbook. 苹果官方也放出了要炸翻全场的宣传语... 这次发布会围 ...

  5. Java(5)输入和输出

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201515.html 博客主页:https://www.cnblogs.com/testero ...

  6. [Beta]the Agiles Scrum Meeting 8

    会议时间:2020.5.22 21:00 1.每个人的工作 今天已完成的工作 成员 已完成的工作 issue yjy 帮助解决博客评分功能遇到的问题 tq 暂无 wjx 完成批量创建团队项目功能 班级 ...

  7. Unity 3D手游对不同分辨率屏幕的UI自适应

    目前安卓手机的屏幕大小各异,没有统一的标准,因此用Unity 3D制作的手游需要做好对不同分辨率屏幕的UI自适应,否则就会出现UI大小不一和位置错位等问题. 我们的项目在开发时的参照分辨率(Refer ...

  8. 【BZOJ 1419】Red is good [概率DP]

    我 是 Z Z 概率好玄啊(好吧是我太弱.jpg Description 桌面上有R张红牌和B张黑牌,随机打乱顺序后放在桌面上,开始一张一张地翻牌,翻到红牌得到1美元,黑牌则付出1美元.可以随时停止翻 ...

  9. 计算机网络之IPv4(IPv4分组、IPv4地址、NAT、子网划分与子网掩码、CIDR、ARP协议、DHCP、ICMP)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105138313 学习课程:<2019王道考研计算机网络> 学习目的 ...

  10. linux wifi热点服务脚本

    最近有关wifi热点的驱动,启动参数都调试完了,验证可以连接传输数据. 首先要在系统启动脚本中插入wifi驱动,配置wlan0的ip insmod /system/vendor/modules/818 ...