04 2016 档案
HOJ 2678 Stars
摘要:题意:N个星星(x,y,z),星星的等级等于x,y,z都小于等于它的星星数量,问每个等级有多少星星。 思路:最暴力的方法是三维树状数组。但是会超内存。所以我们对其中一维先排好序,然后用二维的做。 代码:
阅读全文
HOJ 2275 Number sequence
摘要:题意:问你有多少个序列满足Ai < Aj > Ak and i < j < k. 思路:对每个数求它之前和之后分别有多少个个数比它小,两边相乘。最后求和。具体实现先用树状数组正序求,再反过来再用一遍树状数组。 代码:特别要注意的是题目中Ai的范围是从0开始,但是树状数组不能从0开始,所以统一加一处理
阅读全文
HOJ 1640 Mobile Phone
摘要:题意:有一个n*n的矩阵,op==1时,在(x,y)增加值z,op==2时,求以(x1,y1)和(x2,y2)构成的矩阵的和。 思路:二维线段树。 代码: 参考文章:http://blog.csdn.net/hit_lingo/article/details/50845718 http://www.
阅读全文
SGU 180 Inversions
摘要:题意:求逆序数对数量。 思路一:暴力,O(N^2),超时。 思路二:虽然Ai很大,但是n比较小,可以离散化,得到每个Ai排序后的位置Wi,然后按照输入的顺序,每个Ai对答案的贡献是Wi-Sum(Wi-1)-1.Sum(x)表示1-x中在之前出现的总数,也即非逆序数对的数量,再减去Ai本身,就是Ai的
阅读全文
HDU 1671 Phone List
摘要:一道字典树的模板题,每次插入前查询是否有该串的某个前缀子串存在,或者该串是否某个串的前缀。具体实现是在插入时串的结尾做一个标记,如果某一个串在查询的时候找到一个标记,说明存在前缀;第二种情况是这个串遍历结束后还是没有发现一个空的,也即该串是某个串的子串。最后需要注意的是动态申请空间需要及时释放空间,
阅读全文
RMQ之ST算法模板
摘要:概述 RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。ST算法它可以在O(nlogn)时间内进行预处理,然后在O(1)时间内回答每个查
阅读全文
高精度模板
摘要:C++类,可以进行正整数之间的加减乘除,模,大小比较。输入输出用cin,cout; 1 #include <stdio.h> 2 #include <iostream> 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #
阅读全文
全排列模板
摘要:一,递归实现 1,不去重 1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 using namespace std; 5 void permutation(char *s,int d,int l) 6 { 7 if(d==
阅读全文
堆排序模板
摘要:注意:使用小根堆排序后是递减数组,要得到递增数组,可以使用大根堆。 在堆排序好后再添加元素,需要重新建堆并且排序。 由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N
阅读全文
矩阵快速幂模板
摘要:#include #include const int N=2; const int p2=10000; struct Mat{ int mat[N+1][N+1]; }; Mat operator *(Mat a,Mat b) { Mat c; memset(c.mat,0,sizeof(c.mat));//清零 for(int i=1;i>=1) {...
阅读全文
欧拉函数模板
摘要:1 int e(int n) 2 { 3 int cnt=n; 4 int i; 5 for(i=2;i<=n;i++) 6 if(n%i==0) 7 { 8 cnt -=cnt/i; 9 while(n%i==0) 10 n/=i; 11 } 12 return cnt; 13 } E(x)为欧拉
阅读全文
素数筛选模板
摘要:1 const int N=1e6+11; 2 int p[N],pr[N],cnt; 3 void init() 4 { 5 for(int i=2;i<N;i++) 6 { 7 if(!p[i]) pr[++cnt]=i; 8 for(int j=1;j<=cnt&&i*pr[j]<N;j++)
阅读全文
线段树
摘要:线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组),主要用于高效解决连续区间的动态查询问题,由于二叉结构的特性,它基本能保持每个操作的复杂度为O(lgN)! 性质:父亲的区间是[a,b],(c=(a+b)/2)左儿子的区间是[a,c],右儿子的区间是[c+1,b],
阅读全文
HDU 3667 费用流(拆边)
摘要:题意:有n个城市(1~n),m条有向边;有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用。 思路:c<=5,这里可以做文章;把每条边拆成c条边,容量都为1,费用为ai*(2*i-1)(第二个i是指拆边
阅读全文
HDU 3081 最大流+并查集
摘要:题意:有n个男生和n个女生,玩结婚游戏,由女生选择男生;女生可以选择不会和她吵架的男生以及不会和她闺蜜吵架的男生,闺蜜的闺蜜也是闺蜜。问你最多可以进行多少轮,每一轮每个女生只能选择一个之前她没选过的男生。 思路:显然最少进行0轮,最多进行n轮,所以我们可以对轮数进行二分;源点到女生连一条容量为轮数的
阅读全文
浙公网安备 33010602011771号