关注
提供一个E题O(nlogn)的做法。
右边部分就不说了。
左边部分,要查询[1,i]中最右边的值>h的位置。线段树维护最大值,[1,i]在线段树中分成最多logn段。从右到左的扫这些段,如果这个段的最大值<=h,那么整段都不满足,继续下一段。如果这个段的最大值>h,那么答案一定在这个段内,在这个段内继续二分,复杂度也是O(logn),因此总的复杂度是O(nlogn)。
代码:
int ask(int L, int R, int h, int l, int r, int rt) {
if (L <= l && r <= R) {
if (mx[rt].h <= h) return 0;
if (l == r) return l;
int mid = (l+r)/2;
if (mx[rt<<1|1] > h) return ask(L,R,h,mid+1,r,rt<<1|1);
return ask(L,R,h,l,mid,rt<<1);
}
int mid = (l+r)/2, ans = 0;
if (mid < R) ans = ask(L,R,h,mid+1,r,rt<<1|1);
if (ans == 0 && L <= mid) ans = ask(L,R,h,l,mid,rt<<1);
return ans;
}
查看原帖
点赞 1
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试___岗的必刷题单 #
1993次浏览 37人参与
# 你今年的保底offer是哪家 #
171217次浏览 715人参与
# 神州信息求职进展汇总 #
1282次浏览 36人参与
# 春招开局,你有保底offer吗? #
6851次浏览 61人参与
# 如果不上班,你会去做什么 #
32973次浏览 477人参与
# 实习生至暗时刻 #
2004次浏览 46人参与
# 应届生被毁约被毁意向了怎么办 #
58942次浏览 294人参与
# 硬件开发岗知多少 #
23938次浏览 138人参与
# 哪些公司开暑期实习了? #
3825次浏览 28人参与
# 如果上班像打游戏,你最想解锁什么技能 #
26678次浏览 95人参与
# AI面试问题分享 #
3085次浏览 72人参与
# 实习生的生存小技巧 #
1861次浏览 42人参与
# 你经历过哪些AI幻觉? #
1339次浏览 33人参与
# 找AI工作应该卷什么? #
1076次浏览 24人参与
# 三月的小目标 #
1894次浏览 47人参与
# 小厂一定不能去吗? #
6475次浏览 83人参与
# 关于春招你都做了哪些准备? #
130310次浏览 724人参与
# 你面试被问到过哪些不会的问题? #
113503次浏览 1905人参与
# 作业帮求职进展汇总 #
102008次浏览 615人参与
# 非技术岗简历怎么写 #
299512次浏览 3224人参与
# 非技术岗薪资爆料 #
496800次浏览 3055人参与
