洛谷 P1903 [国家集训队]数颜色 / 维护队列 题解
2022/1/10 6:07:32
本文主要是介绍洛谷 P1903 [国家集训队]数颜色 / 维护队列 题解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
\(Description\)
Luogu传送门
\(Solution\)
带修莫队板子题。
就是再多开一维时间轴,把每次修改修改前的颜色和修改后的颜色都记录下来。
离线处理。
枚举操作时,类似于普通的莫队,while(操作时间)
看看是该插入还是删除,然后直接修改就完了。
贴下代码吧,直接看代码比较好理解。
\(Code\)
#include <bits/stdc++.h> #define get_B(x) x / B using namespace std; namespace IO{ inline int read(){ int x = 0; char ch = getchar(); while(!isdigit(ch)) ch = getchar(); while(isdigit(ch)) x = (x << 3) + (x << 1) + ch - '0', ch = getchar(); return x; } template <typename T> inline void write(T x){ if(x > 9) write(x / 10); putchar(x % 10 + '0'); } } using namespace IO; const int N = 2e5 + 10; const int M = 1e6 + 10; int n, m, B, res; int c[N], col[N]; char op[3]; struct Upd{ int pos, col, pre; }p[N]; struct Qry{ int l, r, t, pos; friend bool operator < (Qry a, Qry b){ if(get_B(a.l) != get_B(b.l)) return get_B(a.l) < get_B(b.l); return get_B(a.r) != get_B(b.r) ? get_B(a.r) < get_B(b.r) : a.t < b.t; } }q[N]; int tp, tq; int vis[M], ans[N]; int main(){ n = read(), m = read(); for(int i = 1; i <= n; ++i) col[i] = c[i] = read(); for(int i = 1; i <= m; ++i){ scanf("%s", op); int x = read(), y = read(); if(op[0] == 'R') p[++tp] = (Upd){x, y, c[x]}, c[x] = y; else q[++tq] = (Qry){x, y, tp, tq}; } if(!tq) return 0; B = pow(n, 0.7); sort(q + 1, q + 1 + tq); int l = 1, r = 0, t = 0; for(int i = 1; i <= tq; ++i){ while(l > q[i].l) res += !vis[col[--l]]++; while(l < q[i].l) res -= !--vis[col[l++]]; while(r < q[i].r) res += !vis[col[++r]]++; while(r > q[i].r) res -= !--vis[col[r--]]; while(t > q[i].t){ int x = p[t].pos; if(l <= x && x <= r) res -= !--vis[col[x]]; col[x] = p[t--].pre; if(l <= x && x <= r) res += !vis[col[x]]++; } while(t < q[i].t){ int x = p[++t].pos; if(l <= x && x <= r) res -= !--vis[col[x]]; col[x] = p[t].col; if(l <= x && x <= r) res += !vis[col[x]]++; } ans[q[i].pos] = res; } for(int i = 1; i <= tq; ++i) write(ans[i]), puts(""); return 0; }\[\_EOF\_ \]
这篇关于洛谷 P1903 [国家集训队]数颜色 / 维护队列 题解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-04敏捷管理与看板工具:提升研发、设计、电商团队工作效率的利器
- 2025-01-04智慧养老管理工具如何重塑养老生态?
- 2025-01-04如何打造高绩效销售团队:工具与管理方法的结合
- 2025-01-04解决电商团队协作难题,在线文档工具助力高效沟通
- 2025-01-04春节超市管理工具:解锁高效运营与顾客满意度的双重密码
- 2025-01-046种主流销售预测模型:如何根据场景选用最佳方案
- 2025-01-04外贸服务透明化:增强客户信任与合作的最佳实践
- 2025-01-04重新定义电商团队协作:在线文档工具的战略作用
- 2025-01-04Easysearch Java SDK 2.0.x 使用指南(三)
- 2025-01-04百万架构师第八课:设计模式:设计模式容易混淆的几个对比|JavaGuide