题解 CF1746F Kazaee
题意
给定一个长度为
- 将
修改为 。 ,计 为 在 中的出现次数,查询 是否均为 的倍数。
数据范围:
题解
显然有一个
因为有神秘人告诉我,这题和 CSP 2022 的 C 类似,想到赋随机值哈希。
考虑把查询转化为区间和,发现区间和是 YES
的必要条件,给每个
这种算法在 NO
且区间和为 YES
,
时间复杂度
#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 3e5 + 10;
mt19937_64 R;
int Rand(int l, int r) {
uniform_int_distribution<int> distribution(l, r);
return distribution(R);
}
int n, m, a[N], lsh[N << 1], cnt;
int rnd[N << 1], b[N];
bool ans[N];
struct query {
int opt, x, y, k;
} q[N];
namespace bit {
ll t[N];
void add(int x, int k) {
for(int i = x; i <= n; i += i & -i)
t[i] += k;
}
ll qry(int x) {
ll res = 0;
for(int i = x; i; i -= i & -i)
res += t[i];
return res;
}
ll qry(int l, int r) {
return qry(r) - qry(l - 1);
}
} using namespace bit;
int main() {
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
scanf("%d", &a[i]), lsh[++cnt] = a[i];
for(int i = 1; i <= m; i++) {
scanf("%d%d%d", &q[i].opt, &q[i].x, &q[i].y);
if(q[i].opt == 1) lsh[++cnt] = q[i].y;
else scanf("%d", &q[i].k);
}
sort(lsh + 1, lsh + 1 + cnt);
cnt = unique(lsh + 1, lsh + 1 + cnt) - lsh - 1;
for(int i = 1; i <= n; i++)
a[i] = lower_bound(lsh + 1, lsh + 1 + cnt, a[i]) - lsh;
for(int i = 1; i <= m; i++)
if(q[i].opt == 1) q[i].y = lower_bound(lsh + 1, lsh + 1 + cnt, q[i].y) - lsh;
memset(ans, 1, sizeof(ans));
for(int T = 1; T <= 40; T++) {
memset(t, 0, sizeof(t));
for(int i = 1; i <= cnt; i++)
rnd[i] = Rand(1, 1e9);
for(int i = 1; i <= n; i++)
b[i] = a[i];
for(int i = 1; i <= n; i++)
add(i, rnd[a[i]]);
for(int i = 1; i <= m; i++) {
if(q[i].opt == 1) {
add(q[i].x, -rnd[b[q[i].x]]);
b[q[i].x] = q[i].y;
add(q[i].x, rnd[b[q[i].x]]);
}
else ans[i] &= (qry(q[i].x, q[i].y) % q[i].k == 0);
}
}
for(int i = 1; i <= m; i++)
if(q[i].opt == 2) puts(ans[i] ? "YES" : "NO");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话