嘿,大家。
想要首杀这题吗?
请动用你们的小肝肝,小欧气,去挑战最后四个测试点吧!
题解(想通过需要一点欧气):
#include <iostream>
#include <algorithm>
#include <vector>
#define BUFSIZE 10000000
struct read {
char buf[BUFSIZE], *p1, *p2, c;
read(): p1(buf), p2(buf) {}
char gc(void) {
return p1 == p2 && (p2 = buf + fread(p1 = buf, 1, BUFSIZE, stdin), p1 == p2) ? EOF : *p1++;
}
read &operator >>(unsigned &x) {
for (c = gc(), x = 0; c < '0' || c > '9'; c = gc());
} cin;
struct write {
char buf[BUFSIZE], *p1, *p2;
write(): p1(buf), p2(buf + BUFSIZE) {}
~write() {
fwrite(buf, 1, p1 - buf, stdout);
}
void pc(char c) {
p1 == p2 &&(fwrite(buf, 1, p1 - buf, stdout), p1 = buf), *p1++ = c;
}
write &operator <<(long long x) {
static unsigned stk[30], tp;
} cout;
unsigned n, s[500010][2], fail[500010];
unsigned val[500010], a[500010], p[500010];
namespace TT {
unsigned rt, cnt, sz[1000010], csz[1000010], A[1000010], B[1000010], ls[500010], rs[500010], tp[500010];
unsigned s[500010], fa[500010], son[500010];
unsigned newnode(unsigned x) {
unsigned u = x + n;
csz[u] = sz[u] = 1, A[u] = B[u] = x;
return u;
}
unsigned bd(unsigned x, unsigned y, unsigned p) {
unsigned u = ++cnt;
ls[u] = x, rs[u] = y, sz[u] = sz[x] + sz[y], tp[u] = p;
}
unsigned c[500010], cs[500010], ccnt;
unsigned cbuild(unsigned l, unsigned r, unsigned p) {
if (l == r)
return c[l];
}
unsigned build(unsigned x) {
unsigned u = x;
static unsigned tmp[500010];
}
unsigned R[1000010], ct;
void ini(unsigned x) {
if (x > n)
return A[x] = B[x] = R[x] = ++ct, void();
}
void dfs(unsigned x) {
static unsigned pt, f[500010];
f[pt++] = x, s[x] = 1, son[x] = 0;
}
void init() {
cnt = 0;
dfs(1);
rt = build(1);
ini(rt);
}
}
std::vector<unsigned> vec[500010];
unsigned sz[500010];
void dfs(unsigned x) {
sz[x] = 1;
}
long long ans[500010];
#define MAXN 2100010
unsigned cct, ls[MAXN], rs[MAXN], mn[MAXN], lmn[MAXN], cnt[MAXN], tag[MAXN];
long long sum[MAXN], stk[MAXN], tp;
inline unsigned newnode(unsigned pos) {
using TT::csz;
unsigned u = tp ? stk[--tp] : ++cct;
ls[u] = rs[u] = 0, tag[u] = sum[u] = mn[u] = 0, cnt[u] = csz[pos], lmn[u] = 2e9;
return u;
}
inline void addtag(unsigned x, unsigned v) {
sum[x] += 1ll * (v - mn[x]) * cnt[x];
mn[x] = tag[x] = v;
}
inline void pushdown(unsigned x, unsigned pos) {
if (!tag[x])
return;
}
inline void pushup(unsigned x, unsigned pos) {
using TT::csz;
}
inline void beats(unsigned &rt, unsigned v, unsigned pos) {
if (!rt)
rt = newnode(pos);
}
inline void lupdate(unsigned b, unsigned v, unsigned &rt, unsigned pos = TTrt) {
using TTB, TT::R;
}
inline void rupdate(unsigned a, unsigned v, unsigned &rt, unsigned pos = TTrt) {
using TTA, TT::R;
}
inline void update(unsigned a, unsigned b, unsigned v, unsigned &rt, unsigned pos = TTrt) {
using TTA, TTB, TTR;
}
inline long long query(unsigned b, unsigned rt, unsigned pos = TTrt) {
using TTB, TT::R;
}
void merge(unsigned &x, unsigned y, unsigned pos = TTrt) {
using TTA, TT::B;
}
unsigned solve(unsigned x) {
unsigned rt = 0;
std::sort(vec[x].begin(), vec[x].end(), [&](unsigned x, unsigned y) {
return sz[x] > sz[y];
});
}
void solve() {
cin >> n;
}
main() {
unsigned T;
cin >> T;
}
好了,我的小肝肝已经不行了。你们加油!