随手点开一个题。

咦,这不是裸的动态开点线段树吗?写一个写一个……

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 数颜色的更多相关文章

  1. luogu 3939 数颜色 - STL(vector)

    传送门 分析: 虽然颜色种类很多,但是所有颜色个数之和n是一定的,这时候就可以使用vector对每个颜色维护一个坐标集合,空间只占n个. 对于查询L,R:直接一行: upper_bound(col[c ...

  2. Luogu 1903 数颜色 | 分块

    Luogu 1903 数颜色 | 分块 莫队不会啊-- 这道题直接分块也能卡过! 这道题的做法很有趣:对于每个位置i,记录它的颜色a[i]上一次出现的位置,记为pre[i]. 这样在查询一个区间[l, ...

  3. [luogu]P3939 数颜色[二分]

    [luogu]P3939 数颜色 题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排, ...

  4. luogu P3939 数颜色 |vector

    题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排,来给他们喂胡萝卜吃. 排列完成后, ...

  5. P3939 数颜色 线段树动态开点

    P3939 数颜色 线段树动态开点 luogu P3939 水.直接对每种颜色开个权值线段树即可,注意动态开点. #include <cstdio> #include <algori ...

  6. BZOJ 2120: 数颜色

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MBSubmit: 3623  Solved: 1396[Submit][Status][Discuss] ...

  7. 【BZOJ-2453&2120】维护队列&数颜色 分块 + 带修莫队算法

    2453: 维护队列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 653  Solved: 283[Submit][Status][Discuss] ...

  8. BZOJ 2120 数颜色(带修改的莫队)

    2120: 数颜色 Time Limit: 6 Sec  Memory Limit: 259 MB Submit: 3478  Solved: 1342 [Submit][Status][Discus ...

  9. BZOJ 2120: 数颜色 分块

    2120: 数颜色 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php? ...

随机推荐

  1. linux查看网络链接状况命令netstat

    linux查看网络链接状况命令 netstat 参数如下: -a 显示所有socket,包括正在监听的. -c 每隔1秒就重新显示一遍,直到用户中断它. -i 显示所有网络接口的信息,格式同“ifco ...

  2. myEclipse下Maven配置操作

    一.Maven 安装与配置 1.点击计算机属性里的高级系统设置,点开环境变量进行配置 2.检验配置是否成功 二.手动创建一个Maven项目,并编译运行成功 1.创建一个文件夹作为项目的根目录 2. 在 ...

  3. LeetCode Count Binary Substrings

    原题链接在这里:https://leetcode.com/problems/count-binary-substrings/description/ 题目: Give a string s, coun ...

  4. 【LeetCode】028. Implement strStr()

    Implement strStr(). Return the index of the first occurrence of needle in haystack, or -1 if needle ...

  5. 使用swing构建一个界面(包含flow ,Border,Grid,card ,scroll布局)

    package UI; import java.awt.BorderLayout;import java.awt.CardLayout;import java.awt.Cursor;import ja ...

  6. vue 链接

    https://www.jianshu.com/p/5d9b341d650f vue-cli入门(三)——人员管理实例 ps:如何创建vue-cli项目 https://www.v2ex.com/t/ ...

  7. linux 标准化

    Unix 1969 年诞生于 AT&T 贝尔实验室,并在 1973 年使用 C 语言进行了重写,从此就具有了很好的可移植性.但是当 AT&T 在 1984 年由于分拆而得以进入计算机领 ...

  8. 蓝桥杯 算法训练 ALGO-149 5-2求指数

     算法训练 5-2求指数   时间限制:1.0s   内存限制:256.0MB 问题描述 已知n和m,打印n^1,n^2,...,n^m.要求用静态变量实现.n^m表示n的m次方.已知n和m,打印n^ ...

  9. 蓝桥杯 基础练习 BASIC-25 回形取数

    基础练习 回形取数   时间限制:1.0s   内存限制:512.0MB 问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 ...

  10. oralce 记一次 External Procedure initial connection 处理

    1 环境 oracle 11.2.0.4 RAC(2 nodes),centos 6.8,实体机 2 问题 线上环境执行一条sql sql> select ST_AsText(ST_Geomet ...