Codeforces 173E Camping Groups 线段树

Camping Groups

我们先计算出, 每个点当leader所能掌控的最多人数。 然后我们把询问离线, 丢到responsibility最大的那个地方去。

然后从大到小往线段树里加人, 加入完之后处理掉当前的询问。

 

如果强制在线的话就只能树套树啦。

#include<bits/stdc++.h>
#define LL long long
#define LD long double
#define ull unsigned long long
#define fi first
#define se second
#define mk make_pair
#define PLL pair<LL, LL>
#define PLI pair<LL, int>
#define PII pair<int, int>
#define SZ(x) ((int)x.size())
#define ALL(x) (x).begin(), (x).end()
#define fio ios::sync_with_stdio(false); cin.tie(0);using namespace std;const int N = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-8;
const double PI = acos(-1);template<class T, class S> inline void add(T& a, S b) {a += b; if(a >= mod) a -= mod;}
template<class T, class S> inline void sub(T& a, S b) {a -= b; if(a < 0) a += mod;}
template<class T, class S> inline bool chkmax(T& a, S b) {return a < b ? a = b, true : false;}
template<class T, class S> inline bool chkmin(T& a, S b) {return a > b ? a = b, true : false;}int n, k, q;
int a[N], r[N];
int c[N];int hsa[N], tota;
int hsr[N], totr;int ans[N];vector<PII> vc[N];
vector<pair<PII, int>> qus[N];struct Bit {int a[N];void modify(int x, int v) {for(int i = x; i < N; i += i & -i) a[i] += v;}int sum(int x) {int ans = 0;for(int i = x; i; i -= i & -i) ans += a[i];return ans;}int query(int L, int R) {if(L > R) return 0;return sum(R) - sum(L - 1);}
} bit;struct SegmentTree {
#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1int mx[N << 2];inline void pull(int rt) {mx[rt] = max(mx[rt << 1], mx[rt << 1 | 1]);}void update(int L, int R, int val, int l, int r, int rt) {if(R < l || r < L || R < L) return;if(L <= l && r <= R) {chkmax(mx[rt], val);return;}int mid = l + r >> 1;update(L, R, val, lson);update(L, R, val, rson);pull(rt);}int query(int L, int R, int l, int r, int rt) {if(R < l || r < L || R < L) return 0;if(L <= l && r <= R) return mx[rt];int mid = l + r >> 1;return max(query(L, R, lson), query(L, R, rson));}
} Tree;int getPosa(int x) {return lower_bound(hsa + 1, hsa + 1 + tota, x) - hsa;
}
int getPosr(int x) {return lower_bound(hsr + 1, hsr + 1 + totr, x) - hsr;
}int main() {memset(ans, -1, sizeof(ans));scanf("%d%d", &n, &k);for(int i = 1; i <= n; i++) scanf("%d", &a[i]), hsa[++tota] = a[i];for(int i = 1; i <= n; i++) scanf("%d", &r[i]), hsr[++totr] = r[i];sort(hsa + 1, hsa + 1 + tota); tota = unique(hsa + 1, hsa + 1 + tota) - hsa - 1;sort(hsr + 1, hsr + 1 + totr); totr = unique(hsr + 1, hsr + 1 + totr) - hsr - 1;for(int i = 1; i <= n; i++) {vc[lower_bound(hsa + 1, hsa + 1 + tota, a[i]) - hsa].push_back(mk(r[i], 0));}for(int i = 1; i <= tota; i++) {for(auto& t : vc[i]) bit.modify(getPosr(t.fi), 1);for(auto& t : vc[i]) {t.se = bit.query(getPosr(t.fi - k), getPosr(t.fi + k + 1) - 1);}}scanf("%d", &q);for(int i = 1; i <= q; i++) {int x, y; scanf("%d%d", &x, &y);int maxa = max(a[x], a[y]);if(r[x] > r[y]) swap(x, y);qus[lower_bound(hsa + 1, hsa + 1 + tota, maxa) - hsa].push_back(mk(mk(r[y] - k, r[x] + k), i));}for(int i = tota; i >= 1; i--) {for(auto& t : vc[i]) Tree.update(getPosr(t.fi), getPosr(t.fi), t.se, 1, totr, 1);for(auto& q : qus[i]) ans[q.se] = Tree.query(getPosr(q.fi.fi), getPosr(q.fi.se + 1) - 1, 1, totr, 1);}for(int i = 1; i <= q; i++) printf("%d\n", ans[i] == 0 ? -1 : ans[i]);return 0;
}/*
*/

 

转载于:https://www.cnblogs.com/CJLHY/p/10899452.html

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

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

相关文章

tomcat闪退解决方案

在这几天&#xff0c;遇到一个Tomcat启动闪退的问题&#xff0c;通过查阅各种资料&#xff0c;算是完美解决。在此分享给朋友们。 首先&#xff0c;确定你的问题在哪里 1.查询错误&#xff1a;winR 输入cmd&#xff0c;进入一般处理程序。通过cd 找到你Tomcat的bin文件夹&#…

《古剑奇谭2》详细测评心得

期待已久的《古剑奇谭2》。仔仔细细的玩下来给我的感觉还是不错的。烛龙也不愧是国产单机的良心公司了&#xff0c;回合制的战斗方式改成了即时战斗类。 的确&#xff0c;国产动作类的游戏经验目前等于零。《古剑2》一改以往国产网游的作风跳出了回合制的圈子实属不易&#xff…

LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)

581. 最短无序连续子数组581. Shortest Unsorted Continuous Subarray 题目描述 给定一个整型数组&#xff0c;你需要寻找一个连续的子数组&#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 你找到的子数组应是最短的&#xff0c;请输出它…

NFS4文件锁机制探秘

2019独角兽企业重金招聘Python工程师标准>>> 简介 NFS4实现“租赁锁”。每个锁拥有一样的“租赁期”。客户端的读写操作将刷新“租赁期”。租赁期到期后&#xff0c;锁将被服务器释放。NFS4通过下述“模型”实现对锁的管理&#xff1a; 1) 清晰地划分客户端和服务器…

Stay Hungry Stay Foolish——网络学习平台分享

从1月24号回家也有一阵子了&#xff0c;今天已经是31号&#xff0c;这一个周的中心思想就是一个字&#xff0c;玩。 学生一但远离学校&#xff0c;就会碰到许多学习的阻力&#xff0c;有来自外界的&#xff0c;家里有活要干&#xff0c;有亲戚要访&#xff0c;有同学邀约&…

linux_check

linux_check echo "********CPU****************" echo 总核数 物理CPU个数 X 每颗物理CPU的核数 echo " 总逻辑CPU数 物理CPU个数 X 每颗物理CPU的核数 X 超线程数"echo 查看物理CPU个数 cat /proc/cpuinfo| grep "physical id"| sort| un…

Unity3D学习笔记之四完善Prefab并添加First Person Controller

好久没学东西并用博客记录了&#xff0c;这个年过的很懒散&#xff0c;慢慢临近开学了&#xff0c;也要提前适应一下&#xff0c;写写东西&#xff0c;这样开学才能更好的进入状态呀&#xff5e;&#xff5e;本次笔记中&#xff0c;我们将来雕琢一个更加完善的Prefab&#xff0…

高精度(压位+判负数+加减乘+读写)

本算法目前属于还处于测试状态&#xff0c;欢迎Hack&#xff01; struct gj{bool fu; //是否是负数int tt,mod; //高精的长度int s[40005]; //压位用的数组inline gj(){ //整体初始化fu0; tt0; mod1e9;memset(s,0,sizeof(s));}inline gj read(){ register char ch; //高精度读…

Hadoop从安装Linux到搭建集群环境

简介与环境准备  hadoop的核心是分布式文件系统HDFS以及批处理计算MapReduce。近年&#xff0c;随着大数据、云计算、物联网的兴起&#xff0c;也极大的吸引了我的兴趣&#xff0c;看了网上很多文章&#xff0c;感觉还是云里雾里&#xff0c;很多不必要的配置都在入门教程出现…

git推送本地分支到远程分支

场景 有时候我们开发需要开一个分支,这样可以有效的并行开发. 开分支有两种方式: 一种是在远程开好分支,本地直接拉下来;一种是本地开好分支,推送到远程.远程先开好分支然后拉到本地 git checkout -b feature-branch origin/feature-branch //检出远程的feature-branch分支到…

delphi 函数内创建对象 释放_JavaScript 的函数底层运行机制

▲ 点击上方蓝字关注我 ▲文 / 景朝霞来源公号 / 朝霞的光影笔记ID / zhaoxiajingjing图 / 自己画目录0 / 题(1)第一题(2)第二题1 / 引用数据类型&#xff1a;object2 / 引用数据类型&#xff1a;function(1)第二题&#xff0c;简图(2)创建函数(3)执行函数(4)闭包3 / 练习题(1)…

Unity3D学习笔记之五为Prefab添加材质

本次笔记中&#xff0c;我们将利用unity来创建并使用材质&#xff0c;把材质添加到我们的Prefab中去。这一系列教程以及素材均参考自人人素材翻译组出品的翻译教程《Unity游戏引擎的基础入门视频教程》&#xff0c;下载链接附在第二篇学习笔记中。继续上次笔记中所记录的东西&a…

分布式版本控制系统之Git

Git Git 是目前世界上最先进的分布式版本控制系统&#xff08;没有之一&#xff09;作用 源代码管理为什么要进行源代码管理? 方便多人协同开发方便版本控制Git的诞生 作者是 Linux 之父&#xff1a;Linus Benedict Torvalds当初开发 Git 仅仅是为了辅助 Linux 内核的开发&…

oo第三次博客-JML规格

这三周的作业主要是围绕以JML来约束代码开发&#xff0c;以确保程序的正确性与鲁棒性。 Part 1&#xff1a;三次作业的实现与bug 第一次作业没有任何算法和数据结构上的难度&#xff0c;对于Path和PathContainer的各个方法的实现按照给出的规格复读即可。唯一的难点&#xff08…

Kinect开发笔记之一Kinect详细介绍

毕业设计的课题我选择了结合Kinect和Unity3D开发体感游戏&#xff0c;这是我十分感兴趣的一个课题&#xff0c;所以做好当然责无旁贷。准备再写一系列Kinect的学习笔记&#xff0c;记录自己毕设一步一个脚印的历程。1、Kinect背景介绍众所周知&#xff0c;Kinect是一款集成了很…

获取2个地址之间的距离(高德API)

2019独角兽企业重金招聘Python工程师标准>>> string startLonLat SiteHelper.GetLonLat("大连"); //获取起始地经度纬度 string endLonLat SiteHelper.GetLonLat("沈阳"); //获取目的地经度纬度 int distance SiteHelper.GetDistance(star…

WPF属性学习

一.WPF属性系统 CLR属性 .NET中的属性称为CLR属性 转载于:https://www.cnblogs.com/programme-maker/p/10910166.html

chemdraw怎么连接两个结构_利用神经结构搜索构建快速准确轻量级的超分辨率网络...

介绍我们知道&#xff0c;把神经网络拆解&#xff0c;可以把它归结为几个元素的排列组合而成&#xff0c;例如&#xff0c;以卷积神经网络为例&#xff0c;其主要由卷积层&#xff0c;池化层&#xff0c;残差连接&#xff0c;注意力层&#xff0c;全连接层等组成&#xff0c;如…

Unity3D学习笔记之六创建更多的Prefab

在写完第五篇后&#xff0c;因为不知名的原因&#xff0c;我突然不能够上传100KB以上的图片在博客中了。等了几天还是这样&#xff0c;所以我用PS把图片的分辨率一张张调低&#xff0c;让图片的大小都在100左右&#xff0c;将积攒了四篇的学习笔记一起发上来&#xff0c;也算弥…

iOS底层探索(二) - 写给小白看的Clang编译过程原理

iOS底层探索(一) - 从零开始认识Clang与LLVM 写在前面 编译器是属于底层知识&#xff0c;在日常开发中少有涉及&#xff0c;但在我的印象中&#xff0c;越接近底层是越需要编程基本功&#xff0c;也是越复杂的。但要想提升技术却始终绕不开要对底层原理的探究&#xff0c;很多资…