- 博客(16)
- 收藏
- 关注
原创 POJ-3468 A Simple Problem with Integers
题目链接:https://vjudge.net/problem/POJ-3468 用线段树解决,成段更新时要使用懒惰标记加速 #include #include #include #include #include typedef long long ll; #define maxn 100010 struct node{ int l, r; ll sum; int mi
2017-10-31 16:40:03 125
原创 HDU-1754 I Hate It
题目链接:https://vjudge.net/problem/HDU-1754 用线段树模板来做,把每个节点由储存子节点和改为储存子节点最大值就可以了 #include #include #include #include using namespace std; #define maxn 200000 struct node{ int l, r, sum; int mid
2017-10-30 09:58:32 150
转载 线段树 模板
对于二叉树来说,2n是左子节点,2n+1是右子节点。 建树复杂度为O(n),更新和查询的复杂度都是O(lgn)。 要注意对一个区间进行更新的时候不需要一直更新到底,可以提高效率,需要的时候往下带就行。 #define maxn 50000 struct node{ int l, r, sum; int mid(){ return (l+r)/2; }
2017-10-30 09:34:03 179
转载 树状数组模板
可以快速求区间和等问题,查询更新复杂度都是lgn, 常数比线段树低。 一维树状数组: long long c[100010]; int n; inline int lowbit(int x) { return x & -x; } void update(int idx, int v) { while (idx <= n) { c[idx] += v;
2017-10-30 09:29:01 167
原创 HDU-1166 敌兵布阵
题目链接:https://vjudge.net/problem/HDU-1166 线段树模板题 #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; #define maxn 5000
2017-10-16 16:42:14 145
原创 UVA-12265 Selling Land
题目链接:https://vjudge.net/problem/UVA-12265 思路参见紫书第八章例题8-19题解 先进行一次预处理,保存每个位置向上延伸的最大高度,之后处理方便很多 #include #include #include #include #include #include #include #include #include #include using namespa
2017-10-16 16:09:25 279
原创 UVA-1442 Cav
题目链接:https://vjudge.net/problem/UVA-1442 思路参见紫书第八章例题8-18题解 #include #include #include #include #include using namespace std; const int N=1e6+10; int a[N],b[N]; int h[N]; int n; int main() { int T;
2017-10-15 18:15:16 196
原创 UVA-1609 Foul Play
题目链接: 参见紫书第八章例题8-17题解 #include #include #include #include #include #include using namespace std; const int N=1024+5; char g[N][N]; int n; bool vis[N]; int main() { while(~scanf("%d",&n)) { for(
2017-10-15 15:00:34 190
原创 UVA-1608 Non-boring sequences
题目链接:https://vjudge.net/problem/UVA-1608 先进行一次预处理,保存每个元素左边和右边最近元素的位置,可以在O(1)时间内判断出某个元素是否唯一 再用分治法检查每个子序列是否non-boring,时间复杂度O(nlogn) #include #include #include #include #include #include #include #inc
2017-10-14 13:39:37 186
原创 UVA-12174 Shuffle
题目链接:https://vjudge.net/problem/UVA-12174 取一个S长度的区间,用区间法扫描一遍序列,判断是否有冲突,把冲突区间对应的解法标0,最多有S种解法,用一个数组标记就行 判断冲突要用一个数组保存区间中各个歌曲的数量,和一个数保存不同歌曲数量,随着区间移动更新 这样时间复杂度为O(n) #include #include #include #include
2017-10-14 11:10:45 204
原创 POJ-1318 Word Amalgamation
题目链接:https://vjudge.net/problem/POJ-1318 用C++中的STL 库解决问题很方便,自己随便写了选择排序处理这些单词 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; map >
2017-10-14 00:31:38 191
原创 UVA-11093 Just Finish it up
题目链接:https://vjudge.net/problem/UVA-11093 直接模拟,枚举出发点,要点是在枚举过程中无法通过P点,则1,2,3...P这些点都不能作为起点,直接跳过就可以 这样时间复杂度为O(n) #include #include #include #include #include #include using namespace std; typedef lon
2017-10-12 16:52:52 133
原创 UVA-12627 Erratic Expansion
题目链接:https://vjudge.net/problem/UVA-12627 找规律,求得求k时间前u行的红气球的个数的递推式,分别求B和A-1的相减即是答案 #include #include #include #include #include #include using namespace std; typedef long long ll; ll p[31]; void ini
2017-10-12 12:25:44 125
原创 UVA-10954 Add All
题目链接:https://vjudge.net/problem/UVA-10954 贪心法,每次选最小的两个相加就可以了 #include #include #include #include #include #include using namespace std; typedef long long ll; const int N=5000+10; int n; int main() {
2017-10-11 20:42:09 140
原创 UVA-714 Copying Books
题目链接:https://vjudge.net/problem/UVA-714 用紫书上的思路,二分法求最小值 #include #include #include #include #include using namespace std; typedef long long ll; const int N=500+5; const ll M=5*1e9; int a[N]; int n,k
2017-10-11 20:20:24 137
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人