P7530 [USACO21OPEN] United Cows of Farmer John P
https://www.luogu.com.cn/problem/P7530
按照套路,我们记表示上一个和相同颜色的位置
考虑扫描线,记为每个左端点的答案,用线段树维护就是区间的和
考虑显然能作为左端点,把它当系数设为0,假设是中间点,那么它可以把中可以作为左端点的全部加
写个带系数的线段树维护即可
code:
#include<bits/stdc++.h>
#define ll long long
#define N 400050
using namespace std;
#define ls (rt << 1)
#define rs (rt << 1 | 1)
ll s[N << 2], val[N << 2], tg[N << 2], sz[N << 2];
void update(int rt) {
s[rt] = s[ls] + s[rs], sz[rt] = sz[ls] + sz[rs];
}
void padd(int rt, int o) {
tg[rt] += o, s[rt] += o * sz[rt], val[rt] += o;
}
void pushdown(int rt) {
if(tg[rt]) {
padd(ls, tg[rt]), padd(rs, tg[rt]);
tg[rt] = 0;
}
}
void addx(int rt, int l, int r, int x, int o) {
if(l == r) {
sz[rt] += o;
s[rt] += o * val[rt];
return ;
}
pushdown(rt);
int mid = (l + r) >> 1;
if(x <= mid) addx(ls, l, mid, x, o);
else addx(rs, mid + 1, r, x, o);
update(rt);
}
void add(int rt, int l, int r, int L, int R, int o) {
if(L > R) return ;
if(L <= l && r <= R) {
padd(rt, o);
return ;
}
pushdown(rt);
int mid = (l + r) >> 1;
if(L <= mid) add(ls, l, mid, L, R, o);
if(R > mid) add(rs, mid + 1, r, L, R, o);
update(rt);
}
ll query(int rt, int l, int r, int L, int R) {
if(L > R) return 0;
if(L <= l && r <= R) return s[rt];
pushdown(rt);
int mid = (l + r) >> 1; ll ret = 0;
if(L <= mid) ret = query(ls, l, mid, L, R);
if(R > mid) ret += query(rs, mid + 1, r, L, R);
return ret;
}
int n, a[N], pre[N], mp[N];
int main() {
scanf("%d", &n);
for(int i = 1; i <= n; i ++) scanf("%d", &a[i]), pre[i] = mp[a[i]], mp[a[i]] = i;
ll ans = 0;
for(int i = 1; i <= n; i ++) {
if(pre[i])
addx(1, 1, n, pre[i], - 1),
add(1, 1, n, pre[pre[i]] + 1, pre[i] - 1, - 1);
ans += query(1, 1, n, pre[i] + 1, i - 1);
addx(1, 1, n, i, 1);
add(1, 1, n, pre[i] + 1, i - 1, 1);
}
printf("%lld", ans);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!