Luogu 3939 数颜色
2024-10-20 20:30:56
随手点开一个题。
咦,这不是裸的动态开点线段树吗?写一个写一个……
Code:
#include <cstdio>
#include <cstring>
using namespace std; const int N = 3e5 + ; int n, qn, a[N]; inline void read(int &X) {
X = ;
char ch = ;
int op = ;
for(; ch > '' || ch < ''; ch = getchar())
if(ch == '-') op = -;
for(; ch >= '' && ch <= ''; ch = getchar())
X = (X << ) + (X << ) + ch - ;
X *= op;
} struct Node {
int lc, rc, sum;
}; namespace PSegT {
int root[N], nodeCnt;
Node s[N * ]; #define mid ((l + r) >> 1) void up(int p) {
if(p) s[p].sum = s[s[p].lc].sum + s[s[p].rc].sum;
} void ins(int &p, int l, int r, int x) {
if(!p) p = ++nodeCnt;
if(l == x && x == r) {
s[p].sum++;
return;
} if(x <= mid) ins(s[p].lc, l, mid, x);
else ins(s[p].rc, mid + , r, x);
up(p);
} void del(int &p, int l, int r, int x) {
if(l == x && x == r) {
s[p].sum--;
if(s[p].sum == ) p = ;
return;
}
if(x <= mid) del(s[p].lc, l, mid, x);
else del(s[p].rc, mid + , r, x);
up(p); if(!s[p].lc && !s[p].rc && !s[p].sum) p = ;
} int query(int p, int l, int r, int x, int y) {
if(!p) return ;
if(x <= l && y >= r) return s[p].sum; int res = ;
if(x <= mid) res += query(s[p].lc, l, mid, x, y);
if(y > mid) res += query(s[p].rc, mid + , r, x, y);
return res;
} } using namespace PSegT; inline void swap(int &x, int &y) {
int t = x;
x = y;
y = t;
} int main() {
read(n), read(qn);
nodeCnt = ;
for(int i = ; i <= n; i++) {
read(a[i]);
ins(root[a[i]], , n, i);
} for(int op; qn--; ) {
read(op);
if(op == ) {
int x, y, c;
read(x), read(y), read(c);
printf("%d\n", query(root[c], , n, x, y));
} else {
int x;
read(x);
del(root[a[x]], , n, x);
del(root[a[x + ]], , n, x + );
swap(a[x], a[x + ]);
ins(root[a[x]], , n, x);
ins(root[a[x + ]], , n, x + );
}
} return ;
}
写完题的我:
内存太小,差评,卡常数,差评……这sb题……
点开题解:
……大概说的就是我……
没事复杂度其实是一样的
警醒a!!!不要一上手就乱写数据结构……
最新文章
- 利用 filter 机制 给 静态资源 url 加上时间戳,来防止js和css文件的缓存,利于开发调试
- 关于mysql 查询内容不区分大小问题
- 推荐10个很棒的AngularJS学习指南
- J-link烧写brjtag工具
- (转载)关于Apache 的两种工作模式
- WebAPI请求
- js unix时间戳转换
- asterisk manager api 配置 (manager.conf)
- C++结构体:默认构造函数,复制构造函数,重载=运算符
- Java自定义注解的实现
- SPA单页面应用
- 第82讲:Scala中List的ListBuffer是如何实现高效的遍历计算的?
- 【Go命令教程】12. go tool pprof
- PowerDesigner中翻转生成PDM图时把Name属性变成注释(转)
- Linux下安装load generator步骤及问题解决
- MapReduce的Shuffle过程介绍
- springboot 日期类型处理
- [BZOJ2727][HNOI2012]双十字
- python多线程练习
- Shiro学习之路 -- 架构及其组件