数颜色

题目描述:

有n只兔子,每只兔子都有其颜色aia_iai​,两种操作;

  1. 询问[l,r]区间有多少只颜色为 c 的兔子
  2. xix_ixi​和xi+1x_{i+1}xi+1​ 位置的两只兔子交换位置

其实这题可以用主席树做,但是可以更加简单;比较思维

数据结构做多了,模板题做多了。这道题就会一直往哪方面想,其实有更简单地方法;

开一个vector数组,存每个颜色出现的位置,因为我们不知道每个颜色的数量,所以用vector而不用二维数组;然后我们要找 [ l,r ] 区间 c 颜色的数量,只要在vector[c]里面找出l,r的位置,然后相减就是答案;交换就直接看代码吧;

代码:

#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define ls k<<1
#define rs k<<1|1
#define inf 0x3f3f3f3f
using namespace std;
const int N=1000100;
const int M=2000000;
const LL mod=1e9+7;
vector<int>ve[N];
int a[N];
int main(){int n,m;scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&a[i]);ve[a[i]].push_back(i);}for(int i=1;i<=n;i++) sort(ve[i].begin(),ve[i].end());//排序,必须 while(m--){int x,l,r,c;scanf("%d",&x);if(x==1){scanf("%d%d%d",&l,&r,&c);printf("%d\n",upper_bound(ve[c].begin(),ve[c].end(),r)-lower_bound(ve[c].begin(),ve[c].end(),l));}else{scanf("%d",&l);if(a[l]!=a[l+1]){(*lower_bound(ve[a[l]].begin(),ve[a[l]].end(),l))++;(*lower_bound(ve[a[l+1]].begin(),ve[a[l+1]].end(),l+1))--;swap(a[l],a[l+1]);}}}return 0;
}

思维题 数颜色(洛谷 P3939)相关推荐

  1. 洛谷P3939 数颜色 vector乱搞

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

  2. 【c++算法刷题笔记】——洛谷2

    1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...

  3. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

    [题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...

  4. 信息学奥赛一本通 1309:【例1.6】回文数(Noip1999) | 洛谷 P1015 [NOIP1999 普及组] 回文数

    [题目链接] ybt 1309:[例1.6]回文数(Noip1999) 洛谷 P1015 [NOIP1999 普及组] 回文数 注:两OJ上的问题考察内容相同,但输出要求不同 [题目考点] 1.高精度 ...

  5. N进制正反累加判回文数(洛谷P1015题题解,Java语言描述)

    题目要求 P1015题目链接 分析 开始的时候写了这么一个代码,应该是比较基础的,是十进制的. private static void low() {Scanner scanner = new Sca ...

  6. 麦森数(洛谷P1045题题解,Java语言描述)

    题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...

  7. 10.10做题——USACO1.2/洛谷1207回文平方数(Dual Palindromes)

    first thing:我市杨家巷发生一起爆炸事故,死亡17人,愿逝者安息! second thing:明天NOIP初赛,RP++,排名–;分数++; third thing:好像USACO评测系统真 ...

  8. 用0和5凑被90整除的max数(洛谷P2192题题解,Java语言描述)

    题目要求 P2192题目链接 分析 盘一盘各种情况吧: 要被90整除,就必须被10整除,所以必须有0,没0就是-1啊. 要被90整除,一堆5,靠0是没用的,只能是9个5凑一堆儿才有用,有0但凑不够9个 ...

  9. 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )

    昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...

  10. 【c++算法刷题笔记】——洛谷1

    2020/2/14-2/16 1. 循环提取一个数的每一位数字 while (d > 0) //d=0跳出循环 {x=d%10; //x每次为d的个位数 d = d / 10; //相当于d每次 ...

最新文章

  1. 深入理解计算机系统(2.6)------整数的运算
  2. android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP
  3. python小型登录系统_python实现用户登录系统
  4. DisJSet:Wireless Network(POJ 2236)
  5. python 两个列表比较_如何在Python中比较两个列表
  6. 鱼骨图和甘特图图表合集PPT模板
  7. MAXWELL软件的初步使用
  8. fms 集群方法测试
  9. 苹果保修期查询_苹果手机维修为什么这么贵?
  10. hdu-2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191(多重背包)
  11. 蓝牙5 BR/EDR LMP层分析
  12. Markdown 里 mermaid 流程图(flowchart)教程
  13. 还不了解游戏建模教程吗?看完这篇文章让你从小白变为油条
  14. android 仿写开发者头条,android高仿今日头条富文本编辑(发布文章)
  15. 非线性光学散射偏微分方程组的matlab求解仿真
  16. IDEA使用AVD Manager创建AVD
  17. Android源码分析 - Parcel 与 Parcelable
  18. 使用Apache Spark SQL探索标普500和石油价格
  19. 如何判断自己是不是社恐?
  20. 学校计算机使用维护管理制度,计算机教室使用管理制度

热门文章

  1. 机器学习 贝叶斯分类器 拉普拉斯修正
  2. pvs-stdio ue4_云中的PVS-Studio:Azure DevOps
  3. 小朋友把游戏藏在计算机里,给两、三岁宝宝的60个超简单家庭早教游戏
  4. JAVA游戏土行孙_《封神榜》土行孙,被誉为国内最知名矮星,现惨淡靠低保度日...
  5. 知识图谱实体预测任务如何计算filtered MRR
  6. 水性建筑涂料行业调研报告 - 市场现状分析与发展前景预测
  7. 通过FAI进行全自动安装
  8. 欢迎清风艾艾在ITPUB博客安家!
  9. 苹果电脑上装Windows7
  10. P1357 食物链(一)