传送门
首先二分答案 \(mid\),问题变成求区间 \([l-mid,r+mid]\) 在该年份的不同类型个数为 \(k\)
关于年份的限制可以离线下来
现在的问题就是区间数颜色,一个套路就是维护每个颜色的后继,即这个位置颜色的下一个位置
那么,如果有 \((-\infty,l-mid-1]\) 的某一个值大于 \(r+mid\) 就不合法
这个可以在线段树上二分实现
时间复杂度 \(nlogn\)

# include <bits/stdc++.h>
using namespace std;
typedef long long ll;namespace IO {const int maxn(1 << 21 | 1);char obuf[maxn], ibuf[maxn], *iS, *iT, c, *oS = obuf, *oT = obuf + maxn - 1, st[60];int f, tp;inline char Getc() {return iS == iT ? (iT = (iS = ibuf) + fread(ibuf, 1, maxn, stdin), (iS == iT ? EOF : *iS++)) : *iS++;}template <class Int> inline void In(Int &x) {for (c = Getc(), f = 1; c < '0' || c > '9'; c = Getc()) f = c == '-' ? -1 : 1;for (x = 0; c >= '0' && c <= '9'; c = Getc()) x = (x << 1) + (x << 3) + (c ^ 48);x *= f;}inline void Flush() {fwrite(obuf, 1, oS - obuf, stdout);oS = obuf;}inline void Putc(char c) {*oS++ = c;if (oS == oT) Flush();}template <class Int> inline void Out(Int x) {if (x < 0) Putc('-'), x = -x;if (!x) Putc('0');while (x) st[++tp] = x % 10 + '0', x /= 10;while (tp) Putc(st[tp--]);}
}using IO :: In;
using IO :: Out;
using IO :: Putc;
using IO :: Flush;const int maxn(3e5 + 5);
const int inf(1e9);int n, q, k, rt, tot, type, vis[maxn], ans[maxn];
multiset <int> pos[maxn], heap[maxn * 20];
multiset <int> :: iterator it, ot, at;struct Segment {int ls, rs, mx, vmx;
} tr[maxn * 20];struct Store {int tp, x, tim, op;inline bool operator <(Store b) const {return tim < b.tim;}
} str[maxn << 1];struct Qry {int x, tim, id;inline bool operator <(Qry b) const {return tim < b.tim;}
} qry[maxn];void Modify(int &x, int l, int r, int p, int v, int op) {int mid;if (!x) x = ++tot;if (l == r) {if (op == 1) heap[x].insert(v);else heap[x].erase(heap[x].find(v));at = heap[x].end();tr[x].mx = heap[x].size() ? (*--at) : -inf;tr[x].vmx = tr[x].mx + l;return;}mid = (l + r) % 2 == 0 ? (l + r) / 2 : (l + r - 1) / 2;p <= mid ? Modify(tr[x].ls, l, mid, p, v, op) : Modify(tr[x].rs, mid + 1, r, p, v, op);tr[x].mx = max(tr[tr[x].ls].mx, tr[tr[x].rs].mx);tr[x].vmx = max(tr[tr[x].ls].vmx, tr[x].mx + r);
}int Query(int x, int l, int r, int ql, int qr) {int mid, ret;if (ql > qr) return inf;if (!x || (ql <= l && qr >= r)) return tr[x].mx;ret = -inf, mid = (l + r) >> 1;if (ql <= mid) ret = Query(tr[x].ls, l, mid, ql, qr);if (qr > mid) ret = max(ret, Query(tr[x].rs, mid + 1, r, ql, qr));return ret;
}int main() {freopen("a.in", "r", stdin);int cnt, i, j, x, t, a, b, mx, l, r, mid, cur, nmx, tmp, vmx;In(n), In(k), In(q), cnt = mx = 0;for (i = 1; i <= n; ++i) {In(x), In(t), In(a), In(b);str[++cnt] = (Store){t, x, a, 1};str[++cnt] = (Store){t, x, b + 1, -1};mx = max(mx, x);}sort(str + 1, str + cnt + 1);for (i = 1; i <= q; ++i) {In(qry[i].x), In(qry[i].tim);qry[i].id = i, mx = max(mx, qry[i].x);}sort(qry + 1, qry + q + 1), tr[0].vmx = tr[0].mx = -inf;for (i = 1; i <= k; ++i) pos[i].insert(-mx), pos[i].insert(inf), Modify(rt, -mx, mx, -mx, inf, 1);for (i = 1, j = 1; i <= q; ++i) {while (j <= cnt && str[j].tim <= qry[i].tim) {if (str[j].op == 1) {type += (vis[str[j].tp] == 0), ++vis[str[j].tp];ot = it = pos[str[j].tp].insert(str[j].x);--it, ++ot;Modify(rt, -mx, mx, *it, *ot, -1);Modify(rt, -mx, mx, *it, str[j].x, 1);Modify(rt, -mx, mx, str[j].x, *ot, 1);}else {type -= (vis[str[j].tp] == 1), --vis[str[j].tp];ot = it = pos[str[j].tp].find(str[j].x);--it, ++ot;Modify(rt, -mx, mx, *it, *ot, 1);Modify(rt, -mx, mx, *it, str[j].x, -1);Modify(rt, -mx, mx, str[j].x, *ot, -1), ++it, pos[str[j].tp].erase(it);}++j;}if (type != k) ans[qry[i].id] = -1;else {l = -mx, r = mx, cur = rt, vmx = nmx = -inf;while (l < r) {mid = (l + r) >> 1;tmp = max(nmx + mid, tr[tr[cur].ls].vmx);if (tmp >= qry[i].x + qry[i].x || qry[i].x <= mid + 1) cur = tr[cur].ls, r = mid;else vmx = tmp, nmx = max(nmx, tr[tr[cur].ls].mx), cur = tr[cur].rs, l = mid + 1;}if (Query(rt, -mx, mx, -mx, l) + l >= qry[i].x + qry[i].x) --l;ans[qry[i].id] = qry[i].x - l - 1;}}for (i = 1; i <= q; ++i) Out(ans[i]), Putc('\n');return Flush(), 0;
}

转载于:https://www.cnblogs.com/cjoieryl/p/10253473.html

UOJ#414. 【APIO2018】新家相关推荐

  1. APIO2018 新家

    题面 题意 在一条路上有n家商店,每个商店有一个类型,在某段时间内在某个位置上存在,每次询问给出一个时间和一个地点,求该时间从该地点出发最少走多少路才可以到达任意一种类型的商店. 做法 首先可以离线处 ...

  2. [APIO2018] New Home 新家(线段树,二分答案,离散化)

    [APIO2018] New Home 新家 Solution 对于时间轴我们直接离散化+扫描线,维护每一个商店的加入和删除. 对于询问(x,t)(x,t)(x,t),不好直接回答,这里的关键一步是: ...

  3. Loj #2585. 「APIO2018」新家

    Loj #2585. 「APIO2018」新家 题目描述 五福街是一条笔直的道路,这条道路可以看成一个数轴,街上每个建筑物的坐标都可以用一个整数来表示.小明是一位时光旅行者,他知道在这条街上,在过去现 ...

  4. 博客搬家了--这次搬进自己家的了,不过博客园的会定时更新!新家地址: http://blog.woshimaijia.com/...

    博客搬家了--这次搬进自己家的了,不过博客园的会定时更新! 新家地址: http://blog.woshimaijia.com/ 博客园的博客很稳定,也是我很喜欢的地方 这里的文章我也会陆续更新的.. ...

  5. 神策数据搬新家,召唤有才新伙伴!

    随着业务的飞速发展,神策数据小团队不断壮大,为了方便公司团队内部高效工作,服务客户,响应需求,勾肩搭背,约饭开黑--领导决定给大家换一个宽敞的新地盘,大手笔哦!我们搬新家啦! 请记住神策数据大家庭的新 ...

  6. 【NOIP2013模拟】小喵喵的新家

    Description 小喵喵和小聪聪从小就是好朋友 ,他们经常在一起玩耍 .如今小喵已经厌倦了自己居住的环境,想请小聪聪为她建一个新家. 小喵喵天生多才多艺,对多种乐器颇有研究.对于生活中常见的图形 ...

  7. [Luogu 3258] JLOI2014 松鼠的新家

    [Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #i ...

  8. P3258 [JLOI2014]松鼠的新家(树上点查分)

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

  9. P3258 [JLOI2014]松鼠的新家

    文章目录 题意: 题解: 树上差分 代码: 树链剖分 代码: P3258 [JLOI2014]松鼠的新家 题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访) 题 ...

  10. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告

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

最新文章

  1. 量子的飞跃:下一代D-Wave量子芯片计算速度能快1000倍
  2. 一步步学习SPD2010--第十一章节--处理母版页(7)--管理Content Placeholders
  3. MoreUnit与MoreUnit
  4. 剑指Offer #06 旋转数组的最小数字(二分查找)| 图文详解
  5. 《系统集成项目管理工程师》必背100个知识点-86项目总结会议讨论的内容
  6. 基于visual c++之windows核心编程代码分析(42)windows下进程的身份切换
  7. java招聘 试题_JAVA现场招聘考试题(一)
  8. 验证部分表单是否重复
  9. 【HDU - 5009】Paint Pearls(dp,链表优化dp)
  10. Oracle 创建用户 scott 例
  11. 织梦根目录感染abc.php,织梦SEO优化:织梦dedecms根目录下robots.txt文件设置详解! - 张俊SEO...
  12. DockOne微信分享(七十七):用Harbor实现容器镜像仓库的管理和运维
  13. C#之整数与字符串互转
  14. 通过 微软 pai-fs 上传数据到HDFS (Microsoft OpenPAI)
  15. 天气预测频繁2项集_寻攻略 | 天气不似预期?我从来没在怕的
  16. 50个知名的开源网站
  17. html产生圆点列表符号的列表,HTML 测验
  18. python文本错别字检测
  19. 求过圆心直线与圆的两个交点
  20. 基于Hadoop的电影推荐系统

热门文章

  1. 老雷socket编程之认识常用协议
  2. java胶囊咖啡机_雀巢Piccolo XS小星星胶囊咖啡机详细介绍
  3. 2018.8.18日,直播笔记
  4. 离散数学 第十六章 环和域
  5. bnu 33970 Ears Cutting
  6. 转载 loadrunner的一些问题解决
  7. PS技能:人物带状穿插效果制作
  8. hosts文件及域名解析过程
  9. 安装ROS、gazebo、PX4基础细节及offboard控制
  10. 19-你知道哪几种锁?分别有什么特点?