线段树
文章平均质量分 53
线段树算法
R_0nnie
这个作者很懒,什么都没留下…
展开
-
poj2828
题目在这如果从正面考虑的话,求出每个人的位置比较困难。一开始,位置1-n都设置为1,即v[1…n] = 1。可以从倒着考虑,依次求出每个人的位置p,将v[p]设置为0。因此问题变成了如何求第k个1的值,如果考虑二分+线段树的话,时间复杂度是O(nlogn^2)。考虑线段树的性质,求出第k个1,可以直接在线段树上操作,因此时间复杂度为O(nlogn)#include <iostream>#include <cstring>using namespace std;con原创 2021-04-06 17:11:27 · 87 阅读 · 0 评论 -
hdu3333 链表+贪心+线段树
题目在这如果直接使用线段树的话,并不能维护对于某个值在给定区间内出现的次数。可以采用离线查询+贪心的方式线段树维护区间1-n的和将给定区间按右端点从小到大排序,对于a[i],记录它上次出现的位置记为pre[i]。从前到后扫描a[1]-a[n],因为询问的区间的右端点是按从小到大排序,所以每次在第i的位置设置为a[i]的值,在pre[i]的位置的值设置为0。如果到达了某个询问的右端点,将答案记录即可。#include <iostream>#include <cstring>原创 2021-04-05 21:44:28 · 97 阅读 · 0 评论 -
kuangbin带你飞 线段树 题解
A-敌兵布阵线段树的单点修改和查询区间总和操作#include <iostream>using namespace std;const int N = 5e4 + 10;struct Node{ int l, r; int sum;}tr[4 * N];int w[N];void pushup(int u){ tr[u].sum = tr[u << 1].sum +tr[u << 1 | 1].sum;}void bu原创 2021-02-06 20:08:09 · 103 阅读 · 0 评论