当前位置: 首页 > news >正文

题解:uoj671【UNR #5】诡异操作

饺子醋环节。

题意:给出一个 \(n\) 长序列 \(a\),有三种操作:

  1. 区间除法。

  2. 区间取与。

  3. 区间求和。

\(n\le 2\times 10^5,V< 2^{128}\)。题面给了一份输入输出模板。

做法:

首先直接做考虑每个点维护一下 \(2^k\) 出现了多少次,一操作直接做总复杂度是 \(O(n\log V)\) 的,二操作采用直接打 tag,复杂度 \(O(n\log n)\),pushup 是 \(\log V\) 的,所以总复杂度是 \(O(n\log^2V)\)

考虑怎么优化,除法和 tag 感觉没什么可以优化的了,考虑怎么优化 pushup。观察 pushup 的本质是什么,我们把 \(2^k\) 出现次数展开成二进制写,其实我们是维护了一个 \(\log V\times \log n\) 的矩阵,那么我们其实没有必要去维护 \(\log V\) 这边,而是维护 \(\log n\) 这一边即可,复杂度降到 \(n\log n\log V\),可以通过。没有太看懂网上题解对于除法说精细实现可以做到 \(n\log V\) 的解释,我一直整体除以 \(2\) 不是爆炸完了。

有点卡常,一个可行的卡常方法是把每个节点只考虑前若干个有值得行,这样会快特别多。我这里比较暴力,直接把长度补成 \(2^n\) 然后就比较方便定长度。

代码:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define u128 __uint128_t
const int maxn = 5.3e5 + 5;
typedef __uint128_t u128;
inline u128 read() {static char buf[100];scanf("%s", buf);// std::cin >> buf;u128 res = 0;for(int i = 0;buf[i];++i) {res = res << 4 | (buf[i] <= '9' ? buf[i] - '0' : buf[i] - 'a' + 10);}return res;
}
inline void output(u128 res) {if(res >= 16)output(res / 16);putchar(res % 16 >= 10 ? 'a' + res % 16 - 10 : '0' + res % 16);//std::cout.put(res % 16 >= 10 ? 'a' + res % 16 - 10 : '0' + res % 16);
}
struct node {vector<u128> a;bool f;inline u128& operator[](int x) {return a[x];}void resize(int N) {a.resize(N);}inline int size() {return a.size();}
} ;
int n, q;
u128 a[maxn], mx, pw = 1;
int len[maxn];
struct Segtree {node tr[maxn << 2];u128 tag[maxn << 2];void pushup(int t) {tr[t].f = tr[t << 1].f & tr[t << 1 | 1].f;u128 val = 0;for (int i = 0; i < tr[t << 1].size(); i++) {tr[t][i] = val ^ tr[t << 1][i] ^ tr[t << 1 | 1][i];val = (tr[t << 1][i] & tr[t << 1 | 1][i]) | (tr[t << 1][i] & val) | (val & tr[t << 1 | 1][i]);}tr[t][tr[t].size() - 1] = val;}void build(int l, int r, int t) {tag[t] = mx;tr[t].resize(len[r - l + 1]);//cout << l << " " << r << "asdf " << len[r - l + 1] << endl;if(l == r) {tr[t][0] = a[l];tr[t].f = a[l] == 0;return ;}int mid = l + r >> 1;build(l, mid, t << 1), build(mid + 1, r, t << 1 | 1);pushup(t);}void addtag(int t, u128 val) {tag[t] &= val;for (int i = 0; i < tr[t].size(); i++)tr[t][i] &= val;}void pushdown(int t) {if(tag[t] == mx)return ;addtag(t << 1, tag[t]);addtag(t << 1 | 1, tag[t]);tag[t] = mx;}void update1(int l, int r, int x, int y, int t, u128 v) {if(tr[t].f)return ;if(l == r) {tr[t][0] /= v;tr[t].f = tr[t][0] == 0;return ;}int mid = l + r >> 1;pushdown(t);if(x <= mid)update1(l, mid, x, y, t << 1, v);if(mid < y)update1(mid + 1, r, x, y, t << 1 | 1, v);pushup(t);}void update2(int l, int r, int x, int y, int t, u128 v) {if(tr[t].f)return ;if(x <= l && r <= y) {addtag(t, v);return ;}int mid = l + r >> 1;pushdown(t);if(x <= mid)update2(l, mid, x, y, t << 1, v);if(mid < y)update2(mid + 1, r, x, y, t << 1 | 1, v);pushup(t);}u128 query(int l, int r, int x, int y, int t) {if(x <= l && r <= y) {u128 res = 0;for (int i = 0; i < tr[t].size(); i++)res += tr[t][i] << i;return res;}int mid = l + r >> 1;pushdown(t);if(y <= mid)return query(l, mid, x, y, t << 1);if(mid < x)return query(mid + 1, r, x, y, t << 1 | 1);return query(l, mid, x, y, t << 1) + query(mid + 1, r, x, y, t << 1 | 1);}
} tree;
signed main() {cin >> n >> q;for (int i = 1; i <= n; i++)a[i] = read();for (int i = 0; i < 128; i++)mx += pw, pw <<= 1;int tn = 1, cnt = 1;while(tn < n)len[tn] = cnt, tn <<= 1, cnt++;len[tn] = cnt;n = tn;tree.build(1, n, 1);while(q--) {int op, l, r; u128 v;cin >> op >> l >> r;if(op == 1) {v = read();if(v != 1)tree.update1(1, n, l, r, 1, v);}if(op == 2)v = read(), tree.update2(1, n, l, r, 1, v);if(op == 3)output(tree.query(1, n, l, r, 1)), putchar('\n');}return 0;
}
http://www.jsqmd.com/news/29056/

相关文章:

  • 2025年10月中国管理咨询公司对比榜:十强参数全解析
  • 2025年11月上海装修公司排行榜:十强资质与工期数据对比
  • 2025年11月上海装修公司服务榜:十强真实案例与用户满意度对比
  • 浮点数存
  • 2025年11月上海装修公司排行榜:十强性价比与满意度对比
  • 2025 年 11 月立式砂磨机厂家推荐排行榜,立式纳米砂磨机,小型立式砂磨机,高效研磨设备优质品牌精选
  • 2025 年 11 月法兰闸阀厂家推荐排行榜,美标/国标/锻钢/高压/高压美标/碳钢美标/碳钢/高温/焊接/法兰闸阀公司推荐
  • 免费使用编程神器MiniMax M2:新手详细入门指南
  • 逆向基础--汇编基础(字与物料地址) (004)
  • 2025年11月脸部泛红产品推荐榜:五款抗泛红精华横向对比与评价
  • 2025年11月脸部泛红产品推荐榜:敏感肌泛红精华实测排行
  • 1072:鸡尾酒疗法
  • 2025年11月智能学习机品牌推荐:新课标同步学习机口碑排名榜
  • [SWPUCTF 2022 新生赛]funny_php WP
  • 2025年11月合肥律师事务所推荐榜:多维度实力对比与口碑评价
  • map[]使用补充
  • 2025年11月婚礼前美白产品推荐榜:淡斑提亮精华口碑排行
  • 2025年11月仓储管理系统推荐榜:鸿链云仓领衔十强对比评测
  • 2025年11月仓储管理系统推荐:权威评测排行榜单深度对比
  • 2025年11月益生菌品牌推荐:实力榜单对比十强菌株定植率与安全性
  • 2025年11月益生菌品牌推荐榜:基于行业白皮书的安全与效能评测
  • 2025年11月阴道瘙痒产品评价榜:医院复购数据与口碑综合排行
  • 386. 字典序排数
  • 2025年11月网站建设公司推荐:央国企与博物馆共同选择的十家
  • 2025年11月中国员工福利公司榜:十家主流平台对比解析
  • 2025年11月背单词软件推荐评测:宠光单词宝宝等五款工具深度解析
  • 2025年11月亲子旅游景区推荐:热门榜对比指南
  • 2025年11月背单词软件评测榜:从自定义词库到数据留存全维度对比
  • 2025年11月亲子旅游景区评测榜:十强真实表现与家庭出游决策指南
  • 2025 年 11 月污水处理厂生物除臭设备,餐厨垃圾生物除臭设备,垃圾中转站生物除臭设备厂家最新推荐,聚焦跨平台能力与售后体系的实用指南