[APIO2018] New Home 新家 [线段树,multiset]
标签:位置 find name freopen oid opera uil type cpp
线段树的每个点表示当前点的前驱,即这个颜色上一次出现的位置,这个玩意multiset随便写写就完了。
重要的是怎么查询答案,无解显然先判掉。
线段树上二分就可以了
#include
using namespace std;
int read() {
int x = 0;
char c = getchar();
while (c 47) x = x * 10 + (c - 48), c = getchar();
return x;
}
int min(int x, int y) { return x y ? x : y; }
int n, k, q;
const int maxn = 3e5 + 53;
const int maxm = 1e7;
multiset st[maxn];
int ans[maxn];
struct node {
int x, t, id, type;
bool operator ms[maxm];
void build(int& p, int l, int r) {
p = ++cnt;
if (l == r) {
for (int i = 1; i > 1;
build(rs[p], mid + 1, r);
}
void modify(int& p, int l, int r, const int& x, const int& inc, const int& del) {
if (!p) p = ++cnt;
if (l == r) {
if (inc >= 0) ms[p].insert(inc);
if (del >= 0) ms[p].erase(ms[p].find(del));
mn[p] = ((ms[p].size()) ? *ms[p].begin() : R);
return;
}
int mid = l + r >> 1;
if (x > 1, d = min(tmn, mn[rs[p]]);
if (mid
[APIO2018] New Home 新家 [线段树,multiset]
标签:位置 find name freopen oid opera uil type cpp
原文地址:https://www.cnblogs.com/Isaunoya/p/12375412.html
评论