线段树
天夏123
这个作者很懒,什么都没留下…
展开
-
HDOJ-1166 敌兵布阵
这道题数据量很大,用朴素的方法做每个操作的时间复杂度为o(n)会超时,如果用线段树则每个操作为o(logn).#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <climits>#include <set>using namespace s原创 2016-03-07 14:23:16 · 209 阅读 · 0 评论 -
HDOJ-1255 覆盖的面积(扫描线)
用len1[]表示相应区间覆盖了一次的长度,用len2[]表示相应区间覆盖了2次或2次以上的长度.cnt[]表示响应区间覆盖的次数.#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define maxn 1005using namespace std;struct Node{ Nod原创 2016-05-28 14:12:43 · 253 阅读 · 0 评论 -
POJ-2528 Mayor's posters(线段树+离散化)
这道题主要是把所有坐标记录在数组里,排序,去重,把每个数和1-N进行一 一对应也就是离散化。不过有个问题是,这样做后1-10 1-4 6-10这组数据会出现错误。解决办法是在离散化后的数组中,若相邻两个数相差大于1,就在其中插入一个介于他们俩之间的数。#include <iostream>#include <cstdio>#include <algorithm>#include <vector原创 2016-05-05 20:13:13 · 204 阅读 · 0 评论 -
zzulioj-1877 蛤玮打扫教室
区间覆盖,延迟操作#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <vector>#include <stack>#include <queue> #define maxn 100005 #define INF 1e9typedef long long ll;usi原创 2016-06-01 19:25:24 · 298 阅读 · 0 评论 -
8VC Venture Cup 2016 - Final Round (Div. 2 Edition) E. Package Delivery
原题链接D. Factory Repairstime limit per test4 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputA factory produces thimbles in原创 2016-07-09 15:57:47 · 446 阅读 · 0 评论 -
51nod-1364 最大字典序排列(线段树)
原题链接1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字典序最大的排列是什么?例如:N = 5, {1 2 3 4 5},k = 6,在6次交换后,能够得到的原创 2016-11-05 10:56:53 · 419 阅读 · 0 评论 -
Codeforces Round #311 (Div. 2)-C. Arthur and Table
原题链接C. Arthur and Tabletime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputArthur has bought a原创 2016-10-15 10:11:05 · 232 阅读 · 0 评论 -
51nod-1672 区间交
原题链接1672 区间交基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注小A有一个含有n个非负整数的数列与m个区间,每个区间可以表示为li,ri。它想选择其中k个区间, 使得这些区间的交的那些位置所对应的数的和最大。(具体可以参照样例)在样例中,5个位置原创 2016-10-05 16:14:56 · 317 阅读 · 0 评论 -
Codeforces Round #225 (Div. 1)-C. Propagating tree(线段树)
原题链接C. Propagating treetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputIahub likes trees very much.原创 2016-12-10 19:08:07 · 238 阅读 · 0 评论 -
HDOJ-1542 Atlantis(扫描线)
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define maxn 105using namespace std;struct Node{ Node(){ } Node(double a, double b, double c, int d){ x原创 2016-05-27 17:08:31 · 223 阅读 · 0 评论 -
HDOJ-1540 Tunnel Warfare(线段树+二分)
当a村庄存在时,用二分找到1到a-1内核a村庄相连的最大村庄数目,再找到a+1, 到n内和a村庄相连的最大村庄数目#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#include <cmath>#include <stac原创 2016-05-26 12:17:18 · 268 阅读 · 0 评论 -
HDOJ-1754 I Hate It
#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define maxn 200005struct Stu{ int l, r, s;}str[maxn*3];int num[maxn];void Build(int n, int l, int r){ str[n].l原创 2016-03-07 18:56:49 · 199 阅读 · 0 评论 -
HDOJ-2795 Billboard
这道题别被h <= 1*10^9骗了,其实h<=200000,用1-h构造线段树,每个节点存储其中每行能存储的宽度的最大值.#include <iostream>#include <cstdio>#include <algorithm>using namespace std;#define maxn 200005struct Str{ int l, r, s;}str[maxn<<2原创 2016-03-07 20:27:47 · 217 阅读 · 0 评论 -
HDOJ-1394 Minimum Inversion Number
这道题先求出整个数列(长度为n)的逆序对个数,方法是对于数m,累加线段树中(m, n-1)中已插入数的个数,再更新…..求出的逆序对个数为sum.在循环数列,把每个数调到最后面,假设数为M,则此时sum += n-1-2*m;#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using names原创 2016-03-09 15:30:14 · 193 阅读 · 0 评论 -
POJ-3468-A Simple Problem with Integers
线段树区间更新,区间求和#include <iostream> #include <cstdio> #define maxn 100005#define INF 1e9using namespace std;typedef long long ll;ll sum[maxn<<2], add[maxn<<2];void Build(int n, int l, int r){ add[原创 2016-04-28 19:11:09 · 188 阅读 · 0 评论 -
HDOJ-1698 Just a Hook
区间覆盖问题,用到线段树,延迟操作.#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#define maxn 100005using namespace std;typedef long long ll;int num[原创 2016-05-23 23:29:08 · 211 阅读 · 0 评论 -
Codeforces Round #312 (Div. 2)-A Simple Task
这道题对字符进行排序要用counting sort, 其中统计每个字符的个数要用到线段树。所以需要为26个字母建26个线段树,统计某个字母在某个区间的数目。线段树的操作为区间更新和区间求和。#include <bits/stdc++.h>#define maxn 100005#define INF 1e9using namespace std;typedef long long ll;int原创 2016-04-29 13:02:13 · 283 阅读 · 0 评论 -
ZOJ-1610 Count the Colors
这道题把每个点表示成线段,比如a表示为a到a+1之间的线段,那么就可以用线段树区间更新加上延迟标记来完成.#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring>#include <queue>#define maxn 8005using namespace s原创 2016-05-24 16:41:13 · 235 阅读 · 0 评论 -
HDOJ-4027 Can you answer these queries?
因为每个数最多根号7次就变为1了,所以对区间进行根号操作时,直接一个一个根号就行了,对于sum[n]对应的区间[l, r],若sum[n] == r - l + 1,就不用操作了。题目所给的X和Y,Y可能小于X。#include <cstdio>#include <iostream>#include <vector>#include <algorithm>#include <cstring原创 2016-05-25 15:24:43 · 184 阅读 · 0 评论 -
Codeforces Round #384 (Div. 2)-D. Chloe and pleasant prizes(线段树)
原题链接D. Chloe and pleasant prizestime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputGenerous s原创 2016-12-16 11:23:40 · 379 阅读 · 0 评论