Luogu 3939 数颜色
随手点开一个题。

咦,这不是裸的动态开点线段树吗?写一个写一个……
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!!!不要一上手就乱写数据结构……
Luogu 3939 数颜色的更多相关文章
- luogu 3939 数颜色 - STL(vector)
传送门 分析: 虽然颜色种类很多,但是所有颜色个数之和n是一定的,这时候就可以使用vector对每个颜色维护一个坐标集合,空间只占n个. 对于查询L,R:直接一行: upper_bound(col[c ...
- Luogu 1903 数颜色 | 分块
Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...
- [luogu]P3939 数颜色[二分]
[luogu]P3939 数颜色 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排, ...
- luogu P3939 数颜色 |vector
题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排,来给他们喂胡萝卜吃. 排列完成后, ...
- P3939 数颜色 线段树动态开点
P3939 数颜色 线段树动态开点 luogu P3939 水.直接对每种颜色开个权值线段树即可,注意动态开点. #include <cstdio> #include <algori ...
- BZOJ 2120: 数颜色
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MBSubmit: 3623 Solved: 1396[Submit][Status][Discuss] ...
- 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法
2453: 维护队列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 653 Solved: 283[Submit][Status][Discuss] ...
- BZOJ 2120 数颜色(带修改的莫队)
2120: 数颜色 Time Limit: 6 Sec Memory Limit: 259 MB Submit: 3478 Solved: 1342 [Submit][Status][Discus ...
- BZOJ 2120: 数颜色 分块
2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...
随机推荐
- Linux C 编程内存泄露检测工具(一):mtrace
前言 所有使用动态内存分配(dynamic memory allocation)的程序都有机会遇上内存泄露(memory leakage)问题,在Linux里有三种常用工具来检测内存泄露的情況,包括: ...
- 排序算法 java实现2
继续排序算法 4.冒泡排序 从第一个开始,跟后面一个数比较,如果比后面大就交换位置,这样没完成一轮,就可以把最大的选出来 public static <T extends Comparable& ...
- linux中使用opdir_readdir读取目录中的信息
#include <dirent.h>#include <stdio.h>#include <stdlib.h> int main(int argc, char * ...
- linux下redis服务器安装使用 安装php的redis扩展 安装laravel下的redis
linux下redis服务器安装使用 学习源头: https://blog.csdn.net/itmanba/article/details/77335012 安装完毕试运行redis的时候,可能会出 ...
- linux指令 apt-grt指令使用
apt-get 是linux的一条指令,主流的linux版本Debian和ubuntu都使用apt-get来安装软件.那么,需安装的软件都放在哪里呢??? apt-get 利用软件安装源来安装软件,其 ...
- Hanoi双塔问题(递推)
Hanoi双塔问题 时间限制: 1 Sec 内存限制: 128 MB提交: 10 解决: 4[提交][状态][讨论版][命题人:外部导入] 题目描述 给定A,B,C三根足够长的细柱,在A柱上放有2 ...
- Oracle 下ASM磁盘总结
Oracle 下ASM磁盘总结 文章转载: Oracle下创建ASM磁盘总结https://blog.csdn.net/okhymok/article/details/78791841?utm_sou ...
- Oracle user,role,profile常规操作--用户,权限,角色,配置文件
Oracle user,role,profile常规操作--用户,权限,角色,配置文件 1 权限查询 1查看所有用户 SQL> select username,account_status,lo ...
- iOS消息转发机制
iOS消息转发机制 “消息派发系统”(message-dispatch system) 若想令类能够理解某条消息,我们必须实现出对应的方法才行.但是,在编译器向类发送其无法解读的消息时并不会报错,因为 ...
- 【转】火狐浏览器中firebug插件的时间线域解释
又到了上图时间了..对照这张图,各个时间所对应的意义就很简单明了. 阻挡(Blocking):每个浏览器有并发连接数量的上限(例如Firefox对每个host限制6个连接),如果当前建立的连接 ...