首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
我是二哈
浙江外国语学院 Java
发布于浙江
关注
已关注
取消关注
@tangren:
题解 | 国旗计划(倍增:区间最值)
国旗计划:原题链接题意: 输入:第一行给你一个n和m,n代表边防战士的人数,m代表总共有几个站点,接下来有n行,每行给你两个站点C和D,战士行走的区间为[C,D],区间会重叠,但不会完全覆盖。 输出:输出每个战士,在以他自身的区间为起点的前提下,至少需要多少人可以使战士之间行走的区间形成一个环。做题思路: 初步入手本题,可以想到如果要判断成环,最好的办法是将环拆分成链,即当右边的点小于左边的点时,说明该点跨过了环,因此将右边的点加上站点总数,即可生成假设在一条链上的两点间的距离。初始输入代码: cin >>n>>m; for (int i=1;i<=n;i++) { cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } 在生成完链后,题目要求也变成了找到覆盖3-10的这个区间,问题是该怎么求解,找到最少的人数去覆盖这个区间,这里可以先试用贪心的思想进行思考,因为战士之间的区间是不会完全覆盖的,所以只要每次是下一个选中区间的起点是当前区间中,最靠近选择区间末的区间,即可完成最少人数成环这一条件。 以此为依据,在原先来链的基础上,再copy(复制)一份每个区间都加上一个环时的情况,用以判断当区间跨过环时,存在2-5的区间,但无法求解的情况,同时,因为题目只规定了战士不会被完全覆盖,但其顺序可能是被打乱的,所以为了满足区间查找的单调性,对数组进行sort排序。改进后输入代码: //输入+处理 cin >>n>>m; for (int i=1;i<=n;i++) { //记录id,在输出结果时,是原序输出 w[i].id=i; cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } //起点排序 sort(w+1,w+n+1); //复制一份 n2=n*2; for (int i=n+1;i<=n2;i++) { w[i]=w[i-n]; w[i].l+=m; w[i].r+=m; } 接下来是查找区间,但注意,如果直接查找区间会导致是o(n^2)的时间复杂度,也就是超时,因此需要优化区间查找,为此,来到本次题解的重中之中,倍增(st)。 在使用倍增前,先了解倍增的使用条件:必须要有单调性,很显然,这个条件已经满足。 其次是倍增的原理:同二分一样,二分的作用是不断缩减数组,以此来找到需要的数,而倍增则是不断增大。它的运算原理可以参考二进制定理:2^n=2^(n-1)+2^(n-2)+...+2^0+1。 因此其运行规则为:先走2^n步,倘若大于等于数值则说明步数过多,倘若小于,将将步数加上2^n,加至最后,加起来的总步数会是要求步数-1的值。st的代码://贪心选择区间+st生成静态数据void st(){ //自建图: int next=1; //链上共n2条 for (int i=1;i<=n2;i++) { //找到每个区间离右端点最近的左端点所在的区间 while (next <= n2 && w[next].l<= w[i].r)next++; //记录区间 go[i][0]=next-1; } //倍增:i = 1,2,4,8,16..共 logn 次 for (int i=1;(1 << i)<=n;i++) { //枚举每条线段 for (int s=1;s<=n2;s++) { //若走2^3步,2^3= 2^2+2^2 //先从 s 到走2^2步到中转站 //再从中转站走2^2到终点 go[s][i]=go[go[s][i-1]][i-1]; } }} 构建完图后,即可运用图表进行求解每位士兵的最少人数,即st的调用。//st的使用 void getRes(int x){ //len为终点长度,该长度代表能否成环 //now为初始的节点 //ans记录人数,因为放入了自身的初始节点,所以人数至少为1 int len=w[x].l+m,now=x,ans=1; //i初始为log2(n),20是为了方便计算 for (int i=20;i>=0;i--) { //从大到小开始查找 int to=go[now][i]; //当to存在,长度在len内 if (to && w[to].r<len) { ans=ans+(1<<i); //累加跳过的区域 now=to;//从新位置开始 } } //记录时使用id记录人数,毕竟sort过了,但输出要使用原序列 //ans+1因为ans是小于len的,还无法成环, //但因为st性质,他的下一步必定大于len,此时可以成环 res[w[x].id]=ans+1;} 最后直接输出存入的数值,即可得出答案,这里直接放ac代码:#include <bits/stdc++.h>using namespace std;const int maxn = 4e5 + 10;int n, n2, m;struct Index{ int id,l,r;//编号+区间 //以起始点小的排序 bool operator<(const Index &b) const { return l< b.l;}};Index w[maxn*2];//破环成链,因此空间需要开两份int go[maxn][25];//倍增记录自建图int res[maxn];//记录结果//贪心选择区间+st生成静态数据void st(){ //自建图: int next=1; //在链上选择共n2条 for (int i=1;i<=n2;i++) { //每个区间的下一个右端点最大的区间 while (next <= n2 && w[next].l<= w[i].r)next++; //区间i的下一个区间 go[i][0]=next-1; } //倍增:i = 1,2,4,8,16..共 logn 次 for (int i=1;(1 << i)<=n;i++) { //枚举每条线段 for (int s=1;s<=n2;s++) { //若走 2^3 步,2^3= 2^2+2^2 //先从 s 到走2^2步到中转站 //再从中转站走2^2到终点 go[s][i]=go[go[s][i-1]][i-1]; } }}//st的使用 void getRes(int x){ //len为终点长度,该长度代表能否成环 //now为初始的节点 //ans记录人数,因为放入了自身的初始节点,所以人数至少为1 int len=w[x].l+m,now=x,ans=1; //i初始为log2(n),20是为了方便计算 for (int i=20;i>=0;i--) { //从大到小开始查找 int to=go[now][i]; //当to存在,长度在len内 if (to && w[to].r<len) { ans=ans+(1<<i); //累加跳过的区域 now=to;//从新位置开始 } } //记录时使用id记录人数,毕竟sort过了,但输出要使用原序列 //ans+1因为ans是小于len的,还无法成环, //但因为st性质,他的下一步必定大于len,此时可以成环 res[w[x].id]=ans+1;}int main(){ //输入+初步处理 cin >>n>>m; for (int i=1;i<=n;i++) { w[i].id=i; cin >>w[i].l>>w[i].r; //破环成链 if (w[i].r<w[i].l)w[i].r+=m; } //起点排序 sort(w+1,w+n+1); //复制一份 n2=n*2; for (int i=n+1;i<=n2;i++) { w[i]=w[i-n]; w[i].l+=m; w[i].r+=m; } //倍增(st)开始 st(); //循环得出每个节点的最少成环人数 for (int i=1;i<=n;i++)getRes(i); //输出答案 for (int i=1;i<=n;i++)cout <<res[i]<<" "; cout <<"\n"; return 0;}
点赞 1
评论 1
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 19:59
淘天集团_Java后端开发工程师
阿里人的 2025 年终总结:买房、晋升、订婚、投资,遇见更清晰的自己
一、引言 又到了一年一度的年终复盘时刻。 复盘,从来不只是回看已经发生的事情,更重要的是——为尚未发生的未来,提前铺路、校准方向。 回望 2025 年,其实很长一段时间里,我始终没有真正找到自己的方向。工作之外,谈不上热爱,也谈不上笃定,只是在惯性中前行。 直到 2025 年的尾声,才终于看清了一些东西:哪些是必须坚持的,哪些是可以放下的,也逐渐摸索出几条更属于自己的路径。这一年,并非突然开悟,而是反复碰壁后的沉淀与取舍。 依旧按照惯例,沿着时间的轨迹,回到 2025 年的起点,梳理这一整年里的得与失、进与退,也为下一阶段的自己,留下些什么。 二、技术(AI驱动) 2025 年,是 AI 加...
2025,我想........
点赞
评论
收藏
分享
2025-12-28 18:53
门头沟学院 golang
【面经】网宿科技-Go后端开发实习-二面面经
bg:9本大二/主go/一段实验室打工经历 二面感觉问得深很多,面试官笑呵呵的很有压力 1. 项目深挖(短链接生成系统 - 架构设计与一致性) 面试官: 请简单介绍一下这个短链接生成系统的核心流程。 面试官: 你为什么引入 Redis?如果去掉 Redis 直接抗 5000 QPS,PostgreSQL 的瓶颈大概会出在哪里? 面试官: 短链接生成的算法你用的哪种?如果是 Hash 算法,产生碰撞(Conflict)了你如何在代码层面解决? 面试官: 谈谈你提到的一致性方案:先更新数据库,再删除缓存。 面试官: 如果数据库更新成功,但删除缓存失败了,此时会有脏数据。除了重试机制,你了解“延迟...
发面经攒人品
点赞
评论
收藏
分享
2025-12-02 11:26
湖南大学 安卓
华为开奖——去还是不去
华为这两天开奖闹得沸沸扬扬,口碑真的直线下滑,基本上看到的都是打算不去的,今年开的基本上都是侮辱价,谁去谁亏听说华子进去一切听分配,整不好还真给你分配到测试点。华子开15也比不了互联网大厂的普通sp甚至某些厂的大白菜,甚至他公积金是5%,闹麻了
杜宇杭你在干什么:
华为吗?我其他offer总包是华为的两倍,直接给我开笑了
华为求职进展汇总
点赞
评论
收藏
分享
2025-12-31 16:41
已编辑
江西农业大学 C++
27届,寒假找实习
最近在投递简历。在BOSS上,投了50来份小厂(1000人以下)。只有几个人回复(我知道这很正常),目前有一个小厂hr的电话,说他们的要求很高,我代码有点少。感觉小厂的要求都好高,什么QT,游戏项目/引擎,嵌入式,音视频,图片处理,机器学习,数据挖掘/分析等等,我是不是要改变策略,投中大厂(可能他们的要求比较低,比较看重学习能力)?现在想,先投一个月(边复习+MySQL+QT),不行就考研去了。
文化小流氓:
小厂这是让你全栈了啊
你投了多少家公司?进展是...
点赞
评论
收藏
分享
2025-12-29 09:00
蚌埠坦克学院 嵌入式软件开发
嵌入式春招一般什么时候开始,怎么样准备
对很多嵌入式方向的同学来说,春招往往比秋招更“隐蔽”:没有铺天盖地的宣讲,信息分散、节奏更快,但机会依然不少,尤其是对有一定基础、想补招或转正失败再冲一波的人来说,春招非常关键。这篇文章分两部分来说清楚两件事:一是嵌入式春招的真实时间线,二是如何高效、有针对性地准备。一、嵌入式春招一般什么时候开始?1️⃣ 整体时间窗口嵌入式春招通常集中在:2 月下旬 ~ 5 月中旬但要注意,它并不是一次性集中爆发,而是分阶段、滚动式进行。2️⃣ 不同阶段的特点(1)2 月下旬 ~ 3 月中旬:提前批 & 内推启动期企业陆续释放 HC(尤其是中小厂、项目型公司)以 内推、熟人推荐、技术群消息 为主官网岗...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
你会和mentor进行deeptalk吗?
2974
2
...
双非本2025秋招总结:65w+SSP三选一,最终还是“有鹅选鹅”|附面试心路历程
2253
3
...
学院本 末 211 硕勇闯 java 后端实习美团 oc 逆袭指南
1606
4
...
牛客运营们,我保证这是我最后一次消费烤肠了!
1430
5
...
27届学院本一段中厂一段中大厂实习,简历求锐评
1010
6
...
元旦前被裁员了
850
7
...
我的牛客年度报告
736
8
...
实习两周遭劝退,隔天就招新人,合理吗?
717
9
...
2025年牛客年度作者丨颁奖典礼✨
701
10
...
27前端已没招
701
创作者周榜
更多
正在热议
更多
#
实习没人带,苟住还是跑路?
#
16705次浏览
313人参与
#
AI时代,哪些岗位最容易被淘汰
#
25577次浏览
217人参与
#
我们是不是被“优绩主义”绑架了?
#
11777次浏览
322人参与
#
秋招被确诊为……
#
280066次浏览
1587人参与
#
牛客2025仙途报告
#
47723次浏览
527人参与
#
每个月的工资都是怎么分配的?
#
81530次浏览
662人参与
#
字节出了豆包coding模型
#
8234次浏览
70人参与
#
对2025年忏悔
#
7933次浏览
153人参与
#
春招前还要继续实习吗?
#
9795次浏览
112人参与
#
为了秋招你都做了哪些准备?
#
30020次浏览
528人参与
#
离家近房租贵VS离家远但房租低,怎么选
#
14232次浏览
132人参与
#
2025秋招体验点评
#
86315次浏览
719人参与
#
非技术2024笔面经
#
452402次浏览
4920人参与
#
一人说一家双休的公司
#
11427次浏览
128人参与
#
牛友的国庆旅行碎片
#
26523次浏览
128人参与
#
我的第一个1024节
#
17141次浏览
251人参与
#
职场新人生存指南
#
492229次浏览
9518人参与
#
面试官问过你最刁钻的问题是什么?
#
13536次浏览
122人参与
#
工作后会跟朋友渐行渐远吗
#
54447次浏览
395人参与
#
毕业租房也有小确幸
#
152872次浏览
4533人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务