摘要:
比赛的时候竟然没有想到这题可以用树状数组过,由于数字的区间比较小,所以直接开设一个树状数组,定义sum(i) 表示小于i的数的总数。那么判定一个数是否有的条件就是计算sum(i+1) == sum(i) 便可以了,查找第K大的数,也就可以直接二分了。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <algorithm>#define MAXN 100000using namespace std;int c[MAXN+5];int lowbit(int x){ r 阅读全文
摘要:
这题可以用二分枚举答案来求解,每次枚举一个答案时我们总是选取满足要求的每个零件的价格最小者,如果金钱能够满足的话就枚举一个更大的质量,这里最好将质量离散化,这样就能枚举每个点都用相应的品质对应。代码如下:#include <cstring>#include <cstdio>#include <cstdlib>#include <algorithm>#include <map>using namespace std;map<int,int>mp;int fee[1005];struct Node{ char name[25] 阅读全文
摘要:
该题题意是要求给定a,b区间内有多少个数满足二进制表示法内0的数目多余1的数目。详见代码:#include <cstdlib>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int c[40][40];void pre(){ c[0][0] = 1; for (int i = 1; i <= 30; ++i) { c[0][i] = 1; for (int j = 1; j <= 30; ++j) { c[j][i] = c[j][. 阅读全文