摘要: 区间dp。 用f[l][r]代表从l合并到r的最小得分。 显然 r-l #include #include using namespace std; const int maxn = 100 + 10; const int inf = 0x3f3f3f3f; int n; int a[maxn],f[maxn][maxn]; int dp(int l,int r) { if(f[l... 阅读全文
posted @ 2016-07-11 23:37 invoid 阅读(215) 评论(0) 推荐(0) 编辑
摘要: 主席树。 求a到b的路径可以看作a到根和b到根的路径的一部分。 对于每个节点,需要查询它到根路径各个数出现的次数。 如果对于每个节点都建一棵权值线段树,肯定会爆掉。 这时用主席树,该节点的权值线段树由父亲的权值线段树转移而来。 建树之前,要对整个数进行重标号,建树的时候才能保证父亲的树已经被建了。 #include #include #include using namespac... 阅读全文
posted @ 2016-07-11 18:59 invoid 阅读(271) 评论(0) 推荐(0) 编辑
摘要: 权值线段树。 要求 L #include #include #define LL long long using namespace std; const LL inf = 10000000000ll; const int maxn = 100000 + 10; const int maxm = 8000000 + 10; struct segtree { LL l[maxm],r[... 阅读全文
posted @ 2016-07-11 17:11 invoid 阅读(372) 评论(0) 推荐(0) 编辑