07 2018 档案
摘要:【题解】 维护个队列即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 using nam
阅读全文
摘要:【题解】 简单粗暴的模拟题。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 using na
阅读全文
摘要:【题解】 答案就是总的边权和减去最小生成树上的边权和。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 2000
阅读全文
摘要:【题解】 裸的最短路。直接跑dijkstra即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010
阅读全文
摘要:【题解】 最小生成树。区别仅仅是不需要连城一棵树,而是连成k棵树,也就是选择最小生成树里面最小的k条边。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg
阅读全文
摘要:【题解】 二分答案+贪心check. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 usin
阅读全文
摘要:【题解】 洛谷标签上说是二分,其实是个小学数学题??可以直接算的。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define
阅读全文
摘要:【题解】 纯模拟题。 我们都知道十进制数化成m进制数可以用短除法,即除m取余、逆序排列。而m进制数化为十进制数,按权展开求和即可。 但在本题中进制的基数R可能为负数,我们知道a%R的符号与R一致,也就是说在本题中我们用短除法得到的某一位上的值可能为负数,要注意向上一位借1化成正的。 1 #inclu
阅读全文
摘要:【题解】 最短路。那么直接写dijkstra就好了。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 20001
阅读全文
摘要:【题解】 线段树基础题。对于每个修改操作把相应区间的sum改为区间长度-sum即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6
阅读全文
摘要:【题解】 就是个树链剖分的模板题。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 #defi
阅读全文
摘要:【题解】 线段树或者单调队列都可以。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 1000010 7 #de
阅读全文
摘要:【题解】 最大值最小化,那么一般要联想到二分。二分一个最大值,然后check一下能否分成小于等于m段即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg
阅读全文
摘要:【题意概述】 给出一个长度为n的序列a,求有多少对[i,j]满足i<j且a[i]>max(a[i+1],a[i+2],...,a[j]). 【题解】 单调栈。 倒着处理序列的元素,维护一个单调递减的栈,同时记录栈中的每个元素进栈的时间。如果当前元素x大于栈顶元素,那么栈顶到第二个元素在原素列之间的这
阅读全文
摘要:【题解】 维护一个单调栈即可。 但是因为有相同身高的存在,所以要稍微考虑下相同身高的处理。因为这个卡了一下下QAQ... 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #de
阅读全文
摘要:【题解】 每个软件只依赖另一个软件,且依赖关系不构成环,那么很容易想到这是树形结构。 我们用1表示以安装,用0表示未安装或已卸载;那么安装一个软件,就是把它到树根的路径上所有的点都改为1;卸载一个软件,就是把它的子树全部改为0. 状态改变的软件包数就是操作前后整棵树的点权和。 这样我们直接树链剖分即
阅读全文
摘要:【题解】 其实解法 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 using namespa
阅读全文
摘要:【题解】 用最短路算法求A到B被扣除的最小百分比即可。稍微修改一下最短路的更新方式即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cmath> 5 #define LL long long 6 #
阅读全文
摘要:【题解】 线段树维护区间中1的个数就好了。每次修改就打上标记并把区间的sum改为len-sum. 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define N 20001
阅读全文
摘要:【题解】 其实就是求逆序对。直接上树状数组就好了。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 500010
阅读全文
摘要:【题解】 题意就是判断树上两条链是否有交。口诀是“判有交,此链有彼祖”。即其中一条链的端点的Lca在另一条链上。 我们设两条链的端点的Lca中深度较大的为L2,对L2与另一条链的两个端点分别求Lca,若满足其中一个Lca等于L2,即表示两链有交。 1 #include<cstdio> 2 #incl
阅读全文
摘要:【题解】 直接二分答案即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #define LL long long 5 #define rg register 6 #define N 200010 7 using na
阅读全文
摘要:【题解】 二分答案。 check的方法:把给出的坐标排序,从小到大扫一遍,如果当前坐标与上一个放牛的位置相差超过mid,就把cnt加一,最后判断cnt是否符合要求即可。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #d
阅读全文
摘要:【题解】 二分答案即可。 注意树的总高度会超过int,所以尽管M不超过int,check的时候还是要开Long Long,避免不必要的麻烦。 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<cstdlib
阅读全文
摘要:【题解】 二分答案。 给出的是两位小数,并没有什么影响,乘100转化成整数就很方便了。 1 #include<cstdio> 2 #include<algorithm> 3 #define LL long long 4 #define rg register 5 #define N 200010 6
阅读全文