T1
惨案一:80pt代码忘交了
正解:
开个桶
cnt[0]++;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= tot; j++) {
ans += cnt[a[i] ^ v[j]];
cnt[a[i]]++;
}
}
vis[]
存因数
T2
考试时暴力挂了
正解:
选出的区间长度一定 \(\le 3\)
线段树维护长度为 \(2\) 和长度为 \(3\) 的最大子段
T3
考试时暴力拿了20分
正解:
维护黑色圈这两个东西
\(a\):前面 \(1\) 的贡献
\(b\):前面 \(1\) 的个数
然后分块
怎么合并呢
维护块内 \(1\) 对块左、右端点间的贡献
要特判区间连接处,不一样时加上左边区间 \(1\) 个数 \(\times\) 右边区间 \(1\) 个数
T4
惨案二:
正解:
环上点和树上点分开维护
树刨
又不用了。。。
对重链开桶,但开不下,用map