题目链接:

点击打开链接

看到题第一眼,线段树?树状数组?主席树(蒟蒻不会)全冒出来?

可是仔细看题发现这是道水题

我们先把每种颜色读入

预处理出每种颜色所在位置的排序

拿样例举例:

1 2 3 2 3 3 

我们第一次初始化为b数组:

第一种颜色下标有:1

第二种颜色下标有:2,4

第三种颜色下标有:3,5,6

故b数组为1,2,4,3,5,6

用另两个数组记录每种颜色的开头和结尾

对于查询操作我们考虑二分:找到第一个比l大的数的下标L,找到最后一个比r小的数的下标R,R-L+1即为所求.

对于修改操作:

我们发现它们的相对位置是不变的:

拿上面的a数组样例2,3交换说明:

1,当这两种颜色不同时

容易证明这两个数在原来各自颜色的相对位置是不变的,所以直接暴力修改a数组就可以了

2, 当这两种颜色相同时改和不改一样,所以不用操作

上代码

---------------------------------------------------------------------------------分割线------------------------------------------------------------------------------------------------------------------------------------------

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int N=300010;
int n,m,st[N],en[N],tot[N],tot1[N];
int a[N],xu[N],b[N];void pre()
{int i,j,k,last=0;for(i=1;i<N;++i)if(tot[i]!=0){st[i]=last+1,en[i]=st[i]+tot[i]-1;last=en[i];tot1[i]=st[i]-1;}for(i=1;i<=n;++i)b[++tot1[a[i]]]=i,xu[i]=tot1[a[i]];
}void find(int l,int r,int c)
{int i,j,ans,ans1,mid;ans=0;ans1=0;i=st[c];j=en[c];while(i<=j){mid=(i+j)/2;if(b[mid]>=l) j=mid-1,ans1=mid;else i=mid+1;}i=st[c];j=en[c];while(i<=j){mid=(i+j)/2;if(b[mid]<=r) i=mid+1,ans=mid;else j=mid-1;}if(ans!=0&&ans1!=0)printf("%d\n",ans-ans1+1);else printf("0\n");
}void work()
{int i,j,k,t,t1,t2,t3;for(i=1;i<=m;++i){scanf("%d",&j);if(j==2){ scanf("%d",&k);t=xu[k];t1=xu[k+1];if(a[k]!=a[k+1]){b[t1]--;b[t]++;t2=xu[k];xu[k]=xu[k+1];xu[k+1]=t2;t2=a[k];a[k]=a[k+1];a[k+1]=t2;}}else{ scanf("%d%d%d",&t,&t1,&t2);find(t,t1,t2);}}
}int main()
{freopen("csy.in","r",stdin);freopen("csy.out","w",stdout);int i,j,k;scanf("%d%d",&n,&m);for(i=1;i<=n;++i){scanf("%d",&a[i]);tot[a[i]]++;}pre();work();return 0;
}

洛谷P3939填颜色相关推荐

  1. 洛谷P3939 数颜色 vector乱搞

    洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...

  2. 洛谷 P1162填图颜色

    洛谷 P1162填图颜色 题目链接 #include <bits/stdc++.h> using namespace std; int xx[] = {0, -1, 0, 1}; int ...

  3. 洛谷P1162 填涂颜色(Python搜索)

    P1162 填涂颜色https://www.luogu.com.cn/problem/P1162 题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方 ...

  4. 洛谷 P1162 填涂颜色

    填涂颜色 题目描述 由数字 000 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 111 构成,围圈时只走上下左右 444 个方向.现要求把闭合圈内的所有空间都填写成 222.例如:6×66\tim ...

  5. 洛谷p1162填涂颜色(dfs写法)

    这道题本是放在试炼场bfs里的,但是我觉得dfs好写些 所以就用dfs过了 题目如下 题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合 ...

  6. 洛谷 P1162 填涂颜色题解

    题目描述 由数字00组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右44个方向.现要求把闭合圈内的所有空间都填写成22.例如:6 \times 66×6的方阵(n=6n=6) ...

  7. 洛谷 P1162 填涂颜色 C++ 深搜 染色法

    题目描述 由数字0组成的方阵中,有一任意形状闭合圈,闭合圈由数字11构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6×6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  8. 洛谷P1162 填涂颜色

    题目链接:https://www.luogu.org/problemnew/show/P1162 这道题是LITTLESUN写的第一道BFS哦! 对于这道题的的思路是把封闭图形外边的0标记一边,在最后 ...

  9. 洛谷 P1162 填涂颜色-dfs染色法

    输入: 6 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 1 1 1 1 输出: 0 0 0 0 0 0 0 0 1 ...

  10. 洛谷-P1903 数颜色 分块 bitset

    题目 题目链接 题意 给你一个数列代表不同的颜色(可以修改). 询问一段区间内有多少种颜色. 题解 很容易想到的就是线段树来维护bitset. 这里为了练习,使用分块维护bitset. * 事实上线段 ...

最新文章

  1. 深度优先搜索(dfs),城堡问题
  2. Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
  3. 数据库事务和并发控制
  4. 服务器端密钥库文件,使用密钥库文件为SOAP运行客户端WS
  5. vc++ cfile 文件操作
  6. 混合现实平台 Mesh、云服务能力翻倍扩容、福利 150 万人……Ignite China 精彩盘点...
  7. 如何不改表结构动态扩展字段?
  8. cf 165 div2 解题报告
  9. ROS解决'[rosrun] Couldn't find executable named ...'
  10. android adguard教程,【2020.1.8更新Adguardhome完整使用教程】目测是新三区最完整的adguard最详细的教程了...
  11. __init__.py 文件用法
  12. 洛谷P2698 [USACO12MAR]Flowerpot S
  13. 小程序怎么把同名文件的前端数据(wxml)传送到后端(js)
  14. 欢迎 收听 海口DJ江林 混音 你的样子 异域风格 为您倾心打造 DJ 江林 reim 短指键盘松哥原创
  15. 互联网公司起名套路大赏
  16. hydra 密码破解
  17. 论文阅读《Vision-Aided RAIM: A New Method for GPS Integrity Monitoring in Approach and Landing Phase》1
  18. python属于高级编程语言_高级语言程序设计(Python)
  19. 嵌入式Linux驱动:LRADC按键
  20. 前端基础-黑马视频开始学习-1

热门文章

  1. Linu系统——基础知识1
  2. Vue3 Mixin的使用方法(全局,局部,setup内部使用)
  3. jQuery-放大镜
  4. 搜狗输入法 与fcitx-ui-qimpanel冲突_搜狗AI录音笔E2预售开启,不只是录音笔,还能拍照翻译?丨43周新闻...
  5. 从蚂蚁的觅食过程看团队研发(转载)
  6. 05.SQL Server(高级查询)
  7. tomcat访问localhost:8080不能显示tom猫页面的问题
  8. HDU 6208 The Dominator of Strings [AC自动机]
  9. JavaScript 各种事件、方法、参数详解示例及常见问题等(全)
  10. 小象学院数据分析笔记:绘制常见的图形