- 博客(8)
- 收藏
- 关注
原创 树状数组
具体的原理稍后补上,代码如下://树状数组可以用来区间求和 时间复杂度为log(n)#include<iostream>#define maxN 100using namespace std;int C[maxN];int A[maxN];int lowbit(int x){ return x&(-x);}//Ci=Ai-lowbit(i)+1+.....
2018-08-11 00:23:36 110
原创 POJ1611
#include<stdio.h>#define MAX 30005int a[MAX],pre[MAX];int find(int x){ if(x!=pre[x]) //找到其祖先节点 pre[x] = find(pre[x]); //由父节点继续向上递归查询 ,并将其父节点变成找到的 return ...
2018-08-11 00:07:01 884
原创 hdu1232畅通工程
#include<iostream>#include<cstdio>using namespace std;int p[1001];int find(int x){ while(x!=p[x]) { x=p[x]; } return x;}void combine(int x,int y){ int...
2018-08-10 23:28:23 95
转载 并查集
很有意思的并查集的讲解:https://blog.csdn.net/u013546077/article/details/64509038
2018-08-10 22:49:21 117
原创 线段树
#include<iostream>#include<algorithm>#include<cmath>#define MAXSIZE 100#define INF 10000using namespace std;struct Data{int val;};Data segmentTree[MAXSIZE];void buildTree(...
2018-08-07 21:34:57 95
原创 RMQ算法:区间最小值
假如一系列的查询数组区间的最小值,使用暴力遍历的话,最坏情况是O(n^2),而RMQ算法运用动态规划以及位运算的方法,预处理的时间复杂度为O(nlogn),查询时间复杂度为O(1),代码如下://rmq算法是解决区间最小值问题的,预处理的时间复杂度是nlog(n),查询时间是O(1)#include<iostream>#include<vector>#inclu...
2018-08-04 19:48:08 685
原创 PKU2352
题目链接:http://poj.org/problem?id=2352分析:假如把数据进行排序之后遍历,则时间复杂度会很高,多达O(n),因为可以抽象为区间求和问题,所以可以使用线段树来解决问题,初始化的时间复杂度为nlog(n),查询时间为O(1)。思路:因为是在左下方,所以可以先按x排序,若x相同,则y小的在后面的方式排序,需注意下标应从1开始。代码如下:#include&l...
2018-08-03 20:44:08 128
原创 876. Middle of the Linked List
时间复杂度为O(n) ,空间复杂度为O(1),双指针,代码如下:class Solution {public: ListNode* middleNode(ListNode* head) { ListNode *f,*s; f=s=head; while(s!=NULL && s->next!=NULL){ s...
2018-07-30 20:05:19 171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人