摘要: 题目 分析 扫描线搞一搞。 按左端点排序,左端点相同时按右端点排序。 如果是左端点就$ cnt++ $,否则$ cnt-- $ 统计一下$ Max $就行了 代码 #include <bits/stdc++.h> using namespace std; void update(int x,int 阅读全文
posted @ 2018-06-25 16:28 noble_(noblex) 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 一开始没看到都是正整数根本不会做。。。。。。 看到了就是水题了。(但还是sb WA了一发) 尺取法搞一搞 代码 #include <bits/stdc++.h> using namespace std; const int maxn = 100000 + 10; int A[maxn], 阅读全文
posted @ 2018-06-25 16:21 noble_(noblex) 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 以前见到过差不多的这题。 xhk说是单调栈水题,但我又不会单调栈,于是当时就放下了。 这么久过去了我还是不会用单调栈做这题,用的是悬线法。 非常好写 代码 #include <cstdio> #include <cstring> #include <algorithm> using na 阅读全文
posted @ 2018-06-25 11:24 noble_(noblex) 阅读(174) 评论(0) 推荐(0) 编辑
摘要: upd:应该是叫压代码吧。。。。我好蠢啊。 蒟蒻 $ noble $_ 热衷于压行(尤其是在vjudge上) 附一个样例(目前代码长度rk1 vjudge) 记录几个小技巧 1、int main() 可以省略成 main() 2、可以不return 0 3、尽量用for 而不用 while 在for 阅读全文
posted @ 2018-06-19 11:47 noble_(noblex) 阅读(1294) 评论(0) 推荐(1) 编辑
摘要: 题目 分析 标准的套路题。 枚举第一行,接着根据第一行递推下面的行。 时间复杂度$ O(2^n \times n^2) $ 代码 #include <bits/stdc++.h> using namespace std; const int maxn=20, INF=1e9; int A[maxn] 阅读全文
posted @ 2018-06-19 11:03 noble_(noblex) 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 在dp分类里做的,然而并不会$ O(n^3) $ 的$ dp $,怒写一发搜索。 看起来是$ O(n^4) $,但仔细分析了一下好像还挺靠谱的? poj挂了,没在poj交,在zoj上交的500ms P.S. 如果要在poj交还要把多数据改成单数据 代码 #include <bits/st 阅读全文
posted @ 2018-06-17 19:23 noble_(noblex) 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 蒟蒻不会数位dp,又是现学的 用$ dp[i][j][k] $ 表示表示长度为i开头j的所有数字中k的个数 然后预处理出这个数组,再计算答案 代码 #include <bits/stdc++.h> using namespace std; typedef long long ll; ll 阅读全文
posted @ 2018-06-17 15:01 noble_(noblex) 阅读(219) 评论(1) 推荐(0) 编辑
摘要: 题目 分析 显然是一个资瓷合并的堆 现学了一发左偏树:教程 然后就没了 代码 #include <bits/stdc++.h> #define lc son[x][0] #define rc son[x][1] using namespace std; typedef long long ll; l 阅读全文
posted @ 2018-06-17 00:02 noble_(noblex) 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 (sb如我写了发不知道什么东西在洛谷上竟然水了84分 嗯咳 设$ i $为双重回文的中心 如果$ j~i $ 可以被算作答案,只有满足如下两式: $ p[j]+j \geq i $ $ 2*(i-j) \leq p[j] $ 计算时我们先做一次马拉车,然后按照 $ p[j]+j \geq 阅读全文
posted @ 2018-06-16 23:54 noble_(noblex) 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 $ k=1 $ 时显然就是树的直径 $ k=2 $ 时怎么做呢? 做法是把一开始树的直径上的边的边权改成$ -1 $,那么当我们第二次用这些边做环时就抵消了一开始的贡献。 所以答案就是边的数量*2 - 一开始树的直径 - 后来树的直径 P.S. 第二次求树的直径时只能dp 代码 #inc 阅读全文
posted @ 2018-06-16 00:12 noble_(noblex) 阅读(286) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 用$ dp[i] $ 表示前 i 个人组成的战斗力之和 然后显然$ dp[i]=Max ( dp[j]+a*(sum[i]-sum[j])^2+b*(sum[i]-sum[j])+c ) $ 然后就是斜率优化dp的套路,设个k比j优........... 然后对最后得出的式子搞斜率优化( 阅读全文
posted @ 2018-06-15 00:43 noble_(noblex) 阅读(155) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 人类智慧题,不会做。。。。。。 详细题解1 详细题解2 总体思路是考虑四边形 讨论凹四边形凸四边形,最后加一个单调性优化省掉个$ O(n) $ 代码 代码感觉好短啊 //https://blog.csdn.net/regina8023/article/details/45556321 # 阅读全文
posted @ 2018-06-14 00:39 noble_(noblex) 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 两道题目 第一问暴力预处理 用$ a[i][j][k] $和$ s[i][j][k] $ 表示从$ (1,1) $ 到 $ (i,j) $ 这个矩形中比k大的数的个数和这些数的和。 对于询问我们二分k,得出答案(最后还要减掉一些值一样的东西 详见代码) 第二问主席树 r=1时只有一个数列 阅读全文
posted @ 2018-06-12 21:49 noble_(noblex) 阅读(162) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 左上角是0,右下角是1。那么大概整张图是由0 1构成的。 那么我们要找到0和1的分界线,值就是最小割。 然后变成求原图最小割。 考虑到此题是平面图,那么就转成对偶图跑最短路。 完了。 总结:以后看到数据在$ nlog(n) $范围内的题,给的图是方格图,给的边还方方正正,那么多半是平面图 阅读全文
posted @ 2018-06-09 23:42 noble_(noblex) 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 在任意两个不相邻的点连一条线,求这条线能穿过几个三角形。 建图比较讲究(详见代码) 求树的直径。 代码 #include <bits/stdc++.h> using namespace std; const int maxn=200005; struct Node{ int x,y,id 阅读全文
posted @ 2018-06-09 23:15 noble_(noblex) 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 又不会做。。。。。。。 显然很好想到前缀和处理一下。 然后考虑最大化结果,直接上st表。 问题来了,然后呢? 怎么做$ length \in [l,r] $ 呢? 正解是设一个五元组 (i,l,r,val,pos) 。 i是左端点,l,r是右端点范围,val是 i 到 pos的和, po 阅读全文
posted @ 2018-06-06 21:50 noble_(noblex) 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 仪仗队 呃,看到题后感觉很像上面的仪仗队。 仪仗队求的是$ gcd(a,b)=1 $ 本题求的是$ gcd(a,b)=m $ 其中m是质数 把 $ gcd(a,b)=1 $ 变形成 $ gcd(a,b)*m=m $ 然后在n的范围内枚举一下,使 $ gcd(a,b)*m <= n $ 再 阅读全文
posted @ 2018-06-05 20:46 noble_(noblex) 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 先敲了个树链剖分,发现无法AC(其实是自己弱,懒得debug、手写栈) 然后去学了学正解 核心挺好理解的,$ query(a) $是$ a $到根的异或和。 答案就是$ lca(x,y) \hat{} query(x) \hat{} query(b) $ 接着维护异或和,很显然线段树挺容 阅读全文
posted @ 2018-06-05 01:53 noble_(noblex) 阅读(178) 评论(1) 推荐(1) 编辑
摘要: 题目 分析 把行和列分别看做二分图的两个集合 每一个在$ (x,y) $处的1,连接$ G[i]->j $ 然后跑二分图匹配 代码 #include <bits/stdc++.h> using namespace std; const int maxn=300; int s[maxn][maxn]; 阅读全文
posted @ 2018-06-03 00:16 noble_(noblex) 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 题目 分析 已经凉凉。看错数据范围敲了发莫队........ 和HH的项链差不多,把每种颜色之前的颜色到再之前的颜色这段区间 区间加。 区间加就树状数组特技 代码 #include <bits/stdc++.h> const int maxn=2e6+10; using namespace std; 阅读全文
posted @ 2018-06-02 19:11 noble_(noblex) 阅读(145) 评论(0) 推荐(0) 编辑
/* */