摘要:
因为整个序列为一个1-n的排列,所以可以这样dp dp[i][j]代表长度为i,以数字j结尾的子序列 dp[i][j]=dp[i-1][1,2,3...j-1]; 这道题的答案就是 dp[k+1][1...n]; 用树状数组求一下前缀和 阅读全文
摘要:
#include #define inf 0x3f3f3f3f const int maxn=10000; using namespace std; struct node{ node* left; node* right; int value,fix,s,cnt; node(int _value,int _fix,int _s,int _cnt):value(_... 阅读全文
摘要:
#include <cstdio> #include <queue> #include <algorithm> #include <string.h> //#include <bits/stdc++.h> using namespace std; const int maxn=100000; int 阅读全文
摘要:
给一段序列,给你去掉所有数字的顺序,输出每去掉一个数,当前联通的子序列的最大值。 倒着来,每次插入一个数,然后求联通的最大值,线段树每个节点标记一下,区间的左右是否插入了数字,还有如果有数字从左边/右边开始连续子序列的值,还有这个节点的区间是否连续。 1 #include <cstdio> 2 3 阅读全文
摘要:
先用st表处理出所有l-r的GCD值,然后二分求得这些值一共出现了多少次。 阅读全文
摘要:
把区间分成√n份降低复杂度. 阅读全文
摘要:
今天刚看到这个模板我是懵逼的,这个线段树既没有建树,也没有查询,只有一个update,而且区间成段更新也没有lazy标记....研究了一下午,我突然我发现我以前根本不懂扫描线,之所以没有lazy标记,是因为扫描线每次只查询1-n里的所有有值的区间长度,因为只要1-n,而不会查找到某些小区间,所以也就 阅读全文
摘要:
我搜遍了网络,只在topcoder的网站上了解到树状数组这个结构是在设计压缩算法时被发现的。这个数据结构真是天才的构想,膜拜! 树状数组的基础是一个被构造出来的式子:C[i]=A[i]+A[i-1]+....+A[i-2^k+1];k代表i的二进制的最后连续0的个数 比如 对于1000和101000 阅读全文