线段树
monzaid
这个作者很懒,什么都没留下…
展开
-
(环状线段树)poj 2750 Potted Flower & poj 2886 Who Gets the Most Candies?
题目: poj2750 题意: 给一个环状线段,有如下操作: x v:修改位置 x 的值,使它的值为 v 修改完后输出这个环状线段的连续区间的值的最大和(最大区间不能是这个环本身) 思路: 连续区间的最大和 = 这个区间的 max(连续区间的最大和,这个区间的总和 - 连续区间的最小和) 线段树要记录: 这个区间的从左(右)边开始的连续区间的最大和 从左(右)边开始的连续区间的最小和 这个区间的总和 这个区间的连续区间的最大和和最小和 这个区间的连续区间的最大和 = max(这个区间的从左(右)边开始原创 2021-01-27 13:57:45 · 114 阅读 · 0 评论 -
poj 2828 Buy Tickets
题目: poj2828 题意: 一支队伍,有多个人按输入顺序在指定的位置插队,输出最后的队伍。 思路: 把插队顺序倒序加入到线段树里,每个人的位置就固定了。 例子: 4 0 20523 1 19243 1 3890 0 31492 线段树记录的是每个区间还有多少个空位,每向线段树加入一个元素,就把它的对应位置设为0。 代码: #include <iostream> #include <algorithm> #define lson l, mid, pos << 1 #de原创 2021-01-27 13:12:24 · 96 阅读 · 0 评论 -
poj 2777 Count Color
题目: poj2777 思路: 线段树 + lazy + 用位来储存状态 举个例子: 有5个颜色 状态1:颜色1,颜色3 用位表示:00101 状态2:颜色3,颜色4 用位表示:01100 状态3:状态1 和 状态2 的叠加 用位表示:状态1 | 状态2 = 00101 | 01100 = 01101 代码 #include <iostream> #include <algorithm> #include <cmath> #include <cstring原创 2021-01-24 11:52:07 · 95 阅读 · 0 评论 -
hdu 1698 Just a Hook 和 poj 3468 A Simple Problem with Integers
题目: hdu1698 题意: 线段树 + lazy 代码 #include <bits/stdc++.h> #define lson l, mid, pos << 1 #define rson mid + 1, r, pos << 1 | 1 using namespace std; const int MAXN = 1e5 + 10; int tree[MAXN<<2]; int lazy[MAXN<<2]; //可以用 bool void原创 2021-01-24 11:03:36 · 67 阅读 · 0 评论 -
hdu 4027 Can you answer these queries?
题目: hdu 题意: 这句话的意思是sqrt后向下取整,而不是sqrt后四舍五入… 思路: 线段树 + lazy,如果sqrt到1后就不用sqrt了 代码 #include <iostream> #include <algorithm> #include <cmath> #define ll long long #define lson l, mid, pos << 1 #define rson mid + 1, r, pos << 1 | 1原创 2021-01-24 10:27:14 · 90 阅读 · 0 评论 -
(二维线段树)hdu 1823 Luck and Love & poj 1195 Mobile phones & poj 2155 Matrix
题目: hdu poj 题意: 二维线段树的查找与添加 注意: 二维线段树的更新方式要全更新: (更新范围) ..... ..... ..... ..... 有一种错误的更新方式: (更新范围) . . . ..... 错误的代码 void addx(int x, int y, int v, int l, int r, int pos){ if (l == r){ addy(pos, y, v, 1, Size, 1); return; } int mi原创 2021-01-24 09:24:06 · 228 阅读 · 1 评论 -
hdu 1540 (poj 2892) Tunnel Warfare
题目 题意: N个村子连成一条线,相邻的村子相连(没有被摧毁)。三个命令: D x,表示x村庄被摧毁; Q x,表示与x直接或间接相连的村庄有多少个,当然包括他自己(被摧毁为0); R,表示恢复最后被摧毁的村庄。 思路: 记录每个线段的从左边起的最大连续区间和从右边起的最大连续区间 代码: #include <iostream> #define lson l, mid, pos << 1 #define rson mid + 1, r, pos << 1 | 1 usin原创 2021-01-23 23:18:45 · 122 阅读 · 0 评论