摘要:
概述 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 # 阅读全文
摘要:
子序列是不连续的,子串是连续的。 滚动数组,空间复杂度为O(N)。时间复杂度O(N^2)。上面的代码是2016中南大学校赛的J题。 阅读全文
摘要:
一,递归实现 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], 阅读全文
摘要:
题意:有n个城市(1~n),m条有向边;有k件货物要从1运到n,每条边最多能运c件货物,每条边有一个危险系数ai,经过这条路的费用需要ai*x2(x为货物的数量),问所有货物安全到达的费用。 思路:c<=5,这里可以做文章;把每条边拆成c条边,容量都为1,费用为ai*(2*i-1)(第二个i是指拆边 阅读全文