摘要:
F - Jealous Two 题目大意: 给出 \(n\) 个点 \((a_i, b_i)\) ,问满足下列条件的 \((i, j)\) 有多少对: \(1 \leq i, j \leq n\) \(a_i \geq a_j\) && \(b_i \leq b_j\) 思路: 典型的二维偏序问题。 阅读全文
摘要:
E - Range Sums 题目大意: 给定一些区间的和,判断是否可以在其中选择一些区间,使得可以通过这些区间的和算出 1 到 \(n\) 的区间和。 思路: 考虑将 \(a_i\) 看成点,对于 \([l, r]\) 的区间和,相当于建一条 \(l-1\) 到 \(r\) 的边。那么要想算出 1 阅读全文
摘要:
E - Edge Deletion 题目大意: 给出 \(n(n \leq 300)\) 个节点的无向图联通图,问最多可以删除多少条边,使得删除后的图,对于任意两个节点 \(u\) 、\(v\) 其最短路都没有发生改变。 思路: 赛时以为是求 \(n\) 遍最短路,标记所有最短路上的边,然后剩下的就 阅读全文
摘要:
P1966 火柴排队 题目大意: 求使两列数字相差距离最小的交换次数。 思路: 要想使得距离最小,必须让 \(a\) 序列的第 \(k\) 大值与 \(b\) 序列的第 \(k\) 大值处在相同的位置上。 值域是 \(0≤ height \leq 2^{31} - 1\) ,考虑离散化获得第 \(k 阅读全文
摘要:
SP3267 D-query 题目大意: 给出长度为 \(n\) 的序列,\(q\) 次询问,每次为区间 \([l, r]\) 有多少不同的数字。 思路: 显然可以用莫队解决,考虑带 log 的做法。 对于一个区间 \([l, r]\) 来说,区间内若有重复出现的数,那么他上一次出现的位置除了第一次 阅读全文
摘要:
D - New Year Concert 题目大意: 给出一个序列 \(a\)。 对于一个序列 \(b\),如果其中存在一个区间 \([L, R]\),满足区间 \(gcd\) 等于区间长度 \(R - L + 1\),则认为这个序列是不好的。 每次修改可以将任意一个数改成任意正整数。 现求对序列 阅读全文
摘要:
单调栈主要用于解决 Next Greater Element 问题,即找左边/右边第一个比自己小/大的元素(位置)。 以下是对四种问题的实现。 #include <bits/stdc++.h> using namespace std; int main() { ios::sync_with_stdi 阅读全文
摘要:
F - Swap and Sort 题目大意: 给出一个 permutation,并给出 \(m\) 组关系 \((a_i, b_i)\) ,每次操作可以交换 \(P_{a_i}, P_{b_i}\),问能否在 5e5 次操作之内将 permutation 变为升序序列,若能则输出交换次数和交换步骤 阅读全文
摘要:
E - Skiing 题目大意: \(n\) 个点每个点有一个点权,依据点权的大小关系确定 \(m\) 条边权,求最长路。 思路: 关于SPFA,他死了。 很明显是求带负权的最长路,赛后有数据毙掉SPFA,考虑如何转化边权使得可以用 dijkstra 求解。 我们将点权看作势能,加入到最短路的求解中 阅读全文
摘要:
Parenthesis Checking 题目大意: 给出一个括号串,q 次以下两种操作: 输入 1 l r,交换第 \(l\)-th 和 \(r\)-th 的字符 输出 2 l r ,查询区间 \([l, r]\) 子串是否是合法括号序列。 思路: 令 ( 为 \(1\),) 为 \(-1\)。 阅读全文