Codeforces 1175E 倍增】的更多相关文章

题意:给你n个区间和m次询问,每次询问一个区间[l, r]至少需要几个区间覆盖? 思路:如果只有一个区间,并且区间是整个取值范围的话,这是一个经典的区间覆盖问题,我们都知道贪心可以解决.现在我们需要快速知道对于一个指定区间至少需要多少个区间来覆盖.我们有一个初步想法,我们可以预处理出包含某一个点的区间中最大的右端点,这样就可以贪心的解决一个区间的问题了.但是,这种做法肯定可以被卡掉,所以我们用倍增来优化这个过程,设st[i][j]是从i位置走连续的2 ^ j个区间可以到的最右端的位置,正常的倍增…
要点 与cf 1168C相似的一点都是看某点x最远能拓展到哪里 看数据想要在logn内查询,考虑倍增步数 const int maxn = 2e5 + 5, X = 5e5 + 5, LOG = 25; int n, m; int l, r; int dp[X][LOG];//点i走pow(2, j)步最远到达的点 int main() { read(n), read(m); rep(i, 1, n) { read(l), read(r); dp[l][0] = max(dp[l][0], r)…
题意:给你n条线段[l,r]以及m组询问,每组询问给出一组[l,r],问至少需要取多少个线段可以覆盖[l,r]区间中所有的点. 如果贪心地做的话,可以求出“从每个左端点l出发选一条线段可以到达的最右端点”,然后一直往右跳直到跳到r为止,但最坏情况下需要跳O(n)次显然是会T的,那咋办呢? 我们拓展一下,利用倍增的方法,可以预处理出“从每个左端点l出发选2^k条线段可以到达的最右端点”,设为$dp[l][k]$,则有$dp[l][k]=dp[dp[l][k-1]][k-1]$,对于每组询问,让k从…
题目链接:http://codeforces.com/contest/356/problem/D 思路(官方题解):http://codeforces.com/blog/entry/9210 此题需要注意,直接用01背包会TLE, 需要看成多重背包,倍增优化一下. 代码: #include <bits/stdc++.h> #define LL long long #define pii pair<int, int> using namespace std; const int ma…
题意:[a,b]表示将字符串a循环写b遍,[c,d]表示把字符串c循环写d遍,给定a,b,c,d,求一个最大的p,使得[[c,d],p]是[a,b]的子序列(注意不是子串,也就是不要求连续).(b,d<=1e7,|a|,|c|<=100) 分析:如果找到了最大的s,使得[c,s]是[a,b]的子序列,那么结果显然就是p=s/d 考虑用一个字符串a去匹配[c,s],那么就相当于指针从下标i->下标j,如果i->j中包含了c的分界点,那么答案就要加上分界点个数 这看似还是不好处理,怎么…
题意: 有\(n\)条线段,区间为\([l_i, r_i]\),每次询问\([x_i, y_i]\),问要被覆盖最少要用多少条线段. 思路: \(f[i][j]\)表示以\(i\)为左端点,用了\(2^j\)条线段,最远到哪里. 然后从大到小贪心即可,类似于倍增找LCA的过程. 代码: #include <bits/stdc++.h> using namespace std; #define N 200010 #define M 500010 #define D 20 int n, q; in…
读入挂 inline void read(int &v) { v = ; ; ; ') { if (c == '-') { p = -; } c = getchar(); } ') { v = (v << ) + (v << ) + c - '; c = getchar(); } v *= p; } 基本模板 离线: /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a))…
原文链接http://www.cnblogs.com/zhouzhendong/p/8848990.html 题目传送门 - CodeForces 623E 题意 给定$n,k$. 让你构造序列$a(0<a_i<2^k)$,满足$b_i(b_i=a_1\ or\ a_2\ or\ \cdots\ or\ a_i)$严格单调递增.($or$为按位或) 问你方案总数.对$10^9+7$取模. $n\leq 10^{18},k\leq 30000$ 题解 毛爷爷论文题. 我怀疑我看到的是假论文.里面…
原文链接https://www.cnblogs.com/zhouzhendong/p/9074226.html 题目传送门 - Codeforces 980E 题意 $\rm Codeforces$ 真是个令人伤心的地方. 伤心的 $zzd$ 给你一个有 $n$ 个节点的树,编号为 $i$ 的节点权值为 $2^i$. 让你砍掉其中 $k$ 个节点,使得剩余的所有节点都连通,并最大化剩余节点的权值和.输出方案. $n\leq 10^6$ 题解 伤心的 $zzd$ 再一次来到了令人伤心的 $\rm…
https://codeforces.com/contest/1059/problem/E 题意 给出一棵树,每个点都有一个权值,要求你找出最少条链,保证每个点都属于一条链,而且每条链不超过L个点 和 每条链的权值和不超过S 题解 对于儿子来说,父亲节点只有一个,所以没有决策点.可以从下往上处理出,每个节点最远能爬到那个节点(过程就是倍增) 然后从下往上贪 (选择往上走的远的子节点) #include<bits/stdc++.h> #define ll long long #define pb…