
线段树
WINDZLY
我不知道最后会得到什么样的结果,但我知道不努力我什么也得不到
展开
-
线段树模板
实际上线段树足够的空间 = n向上扩充到最近的2的某个次方)的两倍 举个例子: 假设数组长度为5,就需要5先扩充成8,8*2=16.线段树需要16个元素。如果数组元素为8,那么也需要16个元素。 #include <bits/stdc++.h> #define maxn 100005 typedef long long ll; using namespace std; ...原创 2018-08-08 14:12:44 · 149 阅读 · 3 评论 -
区间最大公约数
题目链接:https://www.acwing.com/problem/content/description/247/ 可以用常数小的树状数组来求和,用线段树单点修改2333 这个题需要用到更相减损术 gcd(a,b) == gcd(a,b- a),数学归纳法可以推广gcd(a,b,c) == gcd(a,b - a,c -b) 这样我们可以维护一个b数组等于a[i] - a[i - 1...原创 2019-05-01 20:09:52 · 1092 阅读 · 0 评论 -
一个简单的整数问题2
题目链接:https://www.acwing.com/problem/content/description/244/ 对于区间的修改和区间求和(树状数组和线段树) 树状数组在区间求和的时候需要维护两个数组,两个数组都是差分 至于怎么区间求和我们先假设所有的都加上了某一个区间和然后减去那些多加上的 代码实现 线段树区间求和我们需要用到延迟标记让时间复杂度降到logn 树状数组代码...原创 2019-05-03 00:35:25 · 230 阅读 · 0 评论 -
扫描线
扫描线是一种用来处理矩形相交的面积问题的算法 渐近时间复杂度约为O(nlogn) O(nlogn)O(nlogn) 参考博客:https://blog.youkuaiyun.com/niiick/article/details/81985889 练习题目(POJ - 1151 Atlantis) 题目链接:http://poj.org/problem?id=1151 扫描线能将一个二维的转成一维...原创 2019-05-04 01:04:23 · 148 阅读 · 0 评论 -
SPOJ GSS3: Can you answer these queries III
维护一个左区间和右区间,然后合并 题目链接https://www.acwing.com/problem/content/description/246/ #include <bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; typedef long double ld; c...原创 2019-04-29 20:02:53 · 247 阅读 · 1 评论