当前位置: 首页 > news >正文

asp课程设计企业网站设计合肥网站建设毅耘

asp课程设计企业网站设计,合肥网站建设毅耘,深圳全网推广,营销型网站制作成都JZOJ 3854 题意 有 n n n 个人,每个人有地位 r i r_i ri​ 和年龄 a i a_i ai​,对于一个若干人组成的小组,定义其队长为地位最高的成员(若相等则取二者均可),其他成员的年龄与队长的差不能超过 k k …

JZOJ 3854

题意

n n n 个人,每个人有地位 r i r_i ri 和年龄 a i a_i ai,对于一个若干人组成的小组,定义其队长为地位最高的成员(若相等则取二者均可),其他成员的年龄与队长的差不能超过 k k k q q q 次询问,若将 x , y x,y x,y 安排在同一个小组,那么这个小组最多多少人。

题解

先预处理每个人当队长时小组最多有多少人。设这个值为 c n t i cnt_i cnti

具体来说,按 r r r 排序,对于 i i i 需要求前面 i i i 个人有多少个人的年龄在 [ a i − k , a i + k ] [a_i-k,a_i+k] [aik,ai+k] 的区间内。用一个动态开点权值线段树即可。下标是年龄。

考虑对询问离线。不妨假设 r x ≤ r y r_x\le r_y rxry,那么对于一个询问 i i i,能够包含 x i , y i x_i,y_i xi,yi 的队长的范围是 r ≥ r y i , max ⁡ ( a x i , a y i ) − k ≤ a ≤ min ⁡ ( a x i , a y i ) + k r\ge r_{y_i},\max (a_{x_i},a_{y_i}) - k\le a\le \min(a_{x_i},a_{y_i})+k rryi,max(axi,ayi)kamin(axi,ayi)+k。因为与 x , y x,y x,y 的年龄差要同时小于 k k k,所以选范围小的区间。

r y r_y ry 为关键值将询问从大到小排序。然后一个动态开点权值线段树,下标是年龄,叶子节点存储 c n t i cnt_i cnti。这样对于一个询问,只需要查找在 [ max ⁡ ( a x i , a y i ) − k , min ⁡ ( a x i , a y i ) + k ] [\max (a_{x_i},a_{y_i}) - k,\min(a_{x_i},a_{y_i})+k] [max(axi,ayi)k,min(axi,ayi)+k] 区间内的最大值即可。

时间复杂度 O ( n log ⁡ w ) O(n\log w) O(nlogw)

实现

记得判 -1。注意输入的标号是排序前的标号,要处理一下。

#include <bits/stdc++.h>
using namespace std;
const int N = 100005, W = 1e9;
int n, K, Q, ans[N], vp[N], cnt[N];
int tr[N << 4], mx[N << 4], rt1 = 0, rt2 = 0, tot1 = 0, tot2 = 0, ls1[N << 4], rs1[N << 4], ls2[N << 4], rs2[N << 4];
struct mem {int r, ag, id;bool operator< (const mem &T) const { return r < T.r; }
} a[N];
struct Query {int x, y, id;bool operator< (const Query &T) const { return a[y].r > a[T.y].r; }
} q[N];
void upd1(int &rt, int x, int y, int pos, int val) {if (!rt) rt = ++tot1;if (x == y) { tr[rt] += val; return; }int mid = x + y >> 1;if (pos <= mid) upd1(ls1[rt], x, mid, pos, val);else upd1(rs1[rt], mid + 1, y, pos, val);tr[rt] = tr[ls1[rt]] + tr[rs1[rt]];
}
int qry1(int rt, int x, int y, int l, int r) {if (l > y || r < x || !rt) return 0;if (l <= x && y <= r) return tr[rt];int mid = x + y >> 1;return qry1(ls1[rt], x, mid, l, r) + qry1(rs1[rt], mid + 1, y, l, r);
}
void upd2(int &rt, int x, int y, int pos, int val) {if (!rt) rt = ++tot2;if (x == y) { mx[rt] = max(mx[rt], val); return; }int mid = x + y >> 1;if (pos <= mid) upd2(ls2[rt], x, mid, pos, val);else upd2(rs2[rt], mid + 1, y, pos, val);mx[rt] = max(mx[ls2[rt]], mx[rs2[rt]]);
}
int qry2(int rt, int x, int y, int l, int r) {if (l > y || r < x || !rt) return 0;if (l <= x && y <= r) return mx[rt];int mid = x + y >> 1;return max(qry2(ls2[rt], x, mid, l, r), qry2(rs2[rt], mid + 1, y, l, r));
}
int main() {scanf("%d%d", &n, &K);for (int i = 1; i <= n; i++) scanf("%d", &a[i].r), a[i].id = i;for (int i = 1; i <= n; i++) scanf("%d", &a[i].ag);sort(a + 1, a + n + 1);for (int i = 1; i <= n; i++) vp[a[i].id] = i;for (int i = 1; i <= n; ) {int j = i;while (a[j].r == a[j + 1].r) upd1(rt1, 1, W, a[j].ag, 1), j++;upd1(rt1, 1, W, a[j].ag, 1);for (; i <= j; i++) cnt[i] = qry1(rt1, 1, W, a[i].ag - K, a[i].ag + K);}scanf("%d", &Q);for (int i = 1; i <= Q; i++) {scanf("%d%d", &q[i].x, &q[i].y), q[i].x = vp[q[i].x], q[i].y = vp[q[i].y], q[i].id = i;if (q[i].x > q[i].y) swap(q[i].x, q[i].y);}sort(q + 1, q + Q + 1);int k = n;for (int i = 1; i <= Q; i++) {while (q[i].y <= k) upd2(rt2, 1, W, a[k].ag, cnt[k]), k--;ans[q[i].id] = qry2(rt2, 1, W, max(a[q[i].x].ag, a[q[i].y].ag) - K, min(a[q[i].x].ag, a[q[i].y].ag) + K);if (ans[q[i].id] < 2) ans[q[i].id] = -1;}for (int i = 1; i <= Q; i++) printf("%d\n", ans[i]);return 0;
}
http://www.yayakq.cn/news/659346/

相关文章:

  • 河南省旅游网站建设建设银行正式宣布
  • 小米网站seo分析报告+书搜索引擎优化的简称是
  • 海棠网站是什么意思苏中建设南京区域公司
  • 柏林网站建设免费户型设计网站
  • 做音乐网站赚钱吗为啥开发app不建议uniapp
  • 南康网站制作怎么做电商新手入门
  • 有哪些网站用vue做的网络公司经营范围可以加技
  • 做的不错的网站火车头wordpress
  • 大连做网站的公司有哪些网站运维可以做哪些
  • 长沙网站定制公司建设银行面试通知网站
  • 天台县网站建设哪家好seo排名优化联系13火星软件
  • 做一网站困难吗WordPress自动readmore
  • 网站建设项目需求说明书网络软文是什么意思
  • 网站建设文化平台网站中的给我留言怎么做
  • 浙江网站设计公司手机端什么可以替代迅雷
  • 网站建设gzdlzgg马可波罗网站做外贸
  • 旅行社手机网站建设成一个网站开发团队
  • 网站建设服务器数商云官网
  • 邯郸开发网站有哪些电脑做微信推送的网站
  • 企业网站 论文做一些网站的弹出页面
  • 有什么类型的网站在线解压zip网站
  • 网站编辑器做段落空格南昌 网站
  • 关于征求网站建设的通知中国企业报集团官网
  • dedecms 调用网站名称互联网项目推广
  • 珠宝网站建商台北常州网络科技
  • 教做幼儿菜谱菜的网站黄页88网站关键词怎么做
  • linux空间做网站家装设计师自学攻略
  • 中山小型网站建设公司廊坊那家做网站排行榜
  • 铜陵app网站做招聘信息wordpress 万能表单
  • wap网站还用吗高端网站建设公司哪家服务好