CF#633 C. Powered Addition 思维】的更多相关文章

Powered Addition 题意 给出n个数字,现在你可以在第x秒,选择任意数量的下标,让这些位置上的数加上\(2^{x-1}\),问最快需要几秒使得数列变成一个非递减的序列. 思路 让求x的最小值,转换一下. 假设第i个数字在x秒内加的权值为val[i],x的最小值即让val[i]最大值最小. 如何最小,如果a[i-1]>a[i],就让a[i]=a[i-1],计算它们差值的二进制最高位,取最大值. 代码 //#include<bits/stdc++.h> #include<…
题目链接 CF 633 F. The Chocolate Spree 题解 维护子数答案 子数直径 子数最远点 单子数最长直径 (最长的 最远点+一条链) 讨论转移 代码 #include<vector> #include<cstdio> #include<algorithm> #define gc getchar() #define pc putchar #define int long long inline int read() { int x = 0,f = 1…
\(拿样例来看1 7 6 5\) \(6成长到7是最合理的,因为1s就可以实现而且对于后面来说最优\) \(5成长到7是最合理的,因为2s就可以实现而且对于后面最优\) \(发现了什么?二进制是可以组合成任意连续数的,而且每个数都倾向于成长到前面的最大数\) \(只成长到前面最大的数有两个好处.\) \(\color{Orange}{对后面最优,因为是满足条件的最小数字}\) \(\color{Red}{耗费的秒数最小.因为是满足条件的最小数字,所以要增加的数字最小,需要的秒数也最小.}\) #…
题目链接 题目大意:给定一个棋盘,棋盘上有0或1,你可以将一整行取反或者一整列取反,要使得最后剩的1最少.\((1\le n\le 20,1\le m\le 100000)\). 一个容易想到的思路就是先枚举行是否取反,然后列就看1的个数是否大于\(\frac{n}{2}\)考虑是否取反. 我们设函数\(f(x)\)表示\(min(x_0,x_1)\),\(x\)在二进制状态下0或1最少的个数. 我们设行的取反状态为\(k\),每列的最终状态就是\(sta[i]\ xor\ k\),对答案的贡献…
http://codeforces.com/contest/987/problem/C 题意:给你两个n的序列要你根据第一个序列(严格单调递增的方式)在第二个序列里找3个数加起来,输出最小的一个. 思路:先从前往后枚举两个最小的.在从后往前找一个加上使其最小,最后遍历剩下的三元组. AC代码: #include<bits/stdc++.h> #define ll long long using namespace std; ; *1e9; struct node{ int num,id; };…
题意:n 个人參加线上会议.某经理记录了中间一段时间的 m 条上下线记录(1 ≤ n, m ≤ 105).+ 表示上线,- 表示下线. leader是指仅仅要有人在线,他都在线的人.求全部可能的leader. 题目链接:http://codeforces.com/problemset/problem/420/B -->>这种一种人,他们在记录中的第一条记录是下线的,定义为xx.. 三个断言: 1)假设xx存在.那么出现的人中,leader仅仅可能是最后出现的那个xx.. 2)假设xx不存在,那…
Divisibility by 25 time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output You are given an integer nn from 11 to 10181018 without leading zeroes. In one move you can swap any two adjacent digits i…
$des$ 题面 $sol$ 把边从小到大排序,枚举每条边作为答案,然后把两个点合并,判断每条边是否可以作为答案时,$cnt_i$ 表示节点 $i$ 已经合并的 $x$ 之和$size_i$ 表示已经合并的节点的个数$sum = \sum x$将 $a$ 与外面的点合并时判断条件 $size_a <= sum - cnt_a$并查集维护. $code$ #include <bits/stdc++.h> using namespace std; #define Rep(i, a, b) f…
题目链接:https://codeforces.com/problemset/problem/697/C 两种操作: 1是对树上u,v之间的所有边的权值加上w 2是查询树上u,v之间的边权和 树是满二叉树,用map存点到其父亲的边权值,对于操作一,当u!=v时我们先更新深度最大的点到其父亲的边权值,再令其等于其父亲,不断循环直至u=v. 操作二与操作一类似 #include<iostream> #include<algorithm> #include<map> #inc…
题目描述 http://codeforces.com/contest/1339/problem/C 给定一个长度为 \(n\) 的无序数组,你可以在第 \(x\) 秒进行一次下面的操作. 从数组选取任意个数字(也可以一个都不选),为他们全部都加上 \(2^{x-1}\) . 询问你最少可以用多少秒,使得数组非降序排列. 解题 最快策略 首先简化一下问题,假设操作变成:第 \(x\) 秒,可以选取任意个数字,为他们全部都加上 \(1\) .分析一下在这个条件下,可以达到最少秒数的策略. 假设我们有…