A.自动收小麦机
预处理在每一格倒水时水能流过的最短距离,查询时输出前缀和即可。
标程
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 1e5 + 5, M = 1e5 + 5, INF = 0x3f3f3f3f;
int n, q, k;
ll h[N], sum[N];
B.异星突击
由题可知,我们需要一种数据结构,可以快速的查询所有数中异或某个数x后大于h的数的数量。
对于异或值的查询可以想到用trie来解决,记录一下每个节点下的数字数量。每次查询时 从高位向低位贪心查询,当h当前位为1时,我们只能选择和x异或值为1的位置继续向下搜索,当当前位h为0时所有与x异或值为1的数字都符和条件,然后继续搜索当前位不符合条件但以后可能符和条件的数,即可保证所有选择的数都大于h。
标程
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
const int N = 1e5 + 5, M = 1e5 * 32 + 5, INF = 0x3f3f3f3f;
int n, hp, idx = 1;
int cnt[M], tr[M][2];