思维题 数颜色(洛谷 P3939)
数颜色
题目描述:
有n只兔子,每只兔子都有其颜色aia_iai,两种操作;
- 询问[l,r]区间有多少只颜色为 c 的兔子
- 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)相关推荐
- 洛谷P3939 数颜色 vector乱搞
洛谷P3939 数颜色 标签 vector乱搞 简明题意 给一个序列(n <= 3e5),现需要你支持两种操作. 询问区间[L,R]中有多少个值为x的数 交换第k和k+1个数 思路 首先,这题需 ...
- 【c++算法刷题笔记】——洛谷2
1. 洛谷练习--P1579 哥德巴赫猜想(升级版) 题目描述: 现在请你编一个程序验证哥德巴赫猜想. 先给出一个奇数n,要求输出3个质数,这3个质数之和等于输入的奇数. 输入格式: 仅有一行,包含一 ...
- 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏
[题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...
- 信息学奥赛一本通 1309:【例1.6】回文数(Noip1999) | 洛谷 P1015 [NOIP1999 普及组] 回文数
[题目链接] ybt 1309:[例1.6]回文数(Noip1999) 洛谷 P1015 [NOIP1999 普及组] 回文数 注:两OJ上的问题考察内容相同,但输出要求不同 [题目考点] 1.高精度 ...
- N进制正反累加判回文数(洛谷P1015题题解,Java语言描述)
题目要求 P1015题目链接 分析 开始的时候写了这么一个代码,应该是比较基础的,是十进制的. private static void low() {Scanner scanner = new Sca ...
- 麦森数(洛谷P1045题题解,Java语言描述)
题目要求 题目链接 分析 这题挺经典的,快速幂取模算法,如果求出大数再取模就可能T掉. 之前有篇文章写了这个算法:<快速幂算法详解&&快速幂取模算法详解> 既然是Java, ...
- 10.10做题——USACO1.2/洛谷1207回文平方数(Dual Palindromes)
first thing:我市杨家巷发生一起爆炸事故,死亡17人,愿逝者安息! second thing:明天NOIP初赛,RP++,排名–;分数++; third thing:好像USACO评测系统真 ...
- 用0和5凑被90整除的max数(洛谷P2192题题解,Java语言描述)
题目要求 P2192题目链接 分析 盘一盘各种情况吧: 要被90整除,就必须被10整除,所以必须有0,没0就是-1啊. 要被90整除,一堆5,靠0是没用的,只能是9个5凑一堆儿才有用,有0但凑不够9个 ...
- 记忆优化搜索(简单题)(洛谷P3183 [HAOI2016]食物链 )( P5635 【CSGRound1】天下第一 )
昨天做了蓝桥杯的时候,发现自己对于记忆优化搜索甚是不熟悉,所以今天随便找了几个基础题做做,顺便写下两片题解,顺便用了一下devc++敲的代码,发现没有代码补全真的可以说是灰常难受了... 洛谷P318 ...
- 【c++算法刷题笔记】——洛谷1
2020/2/14-2/16 1. 循环提取一个数的每一位数字 while (d > 0) //d=0跳出循环 {x=d%10; //x每次为d的个位数 d = d / 10; //相当于d每次 ...
最新文章
- 深入理解计算机系统(2.6)------整数的运算
- android系统里面的mic是哪个app_安利 | 那些错过会后悔一年的法语APP
- python小型登录系统_python实现用户登录系统
- DisJSet:Wireless Network(POJ 2236)
- python 两个列表比较_如何在Python中比较两个列表
- 鱼骨图和甘特图图表合集PPT模板
- MAXWELL软件的初步使用
- fms 集群方法测试
- 苹果保修期查询_苹果手机维修为什么这么贵?
- hdu-2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191(多重背包)
- 蓝牙5 BR/EDR LMP层分析
- Markdown 里 mermaid 流程图(flowchart)教程
- 还不了解游戏建模教程吗?看完这篇文章让你从小白变为油条
- android 仿写开发者头条,android高仿今日头条富文本编辑(发布文章)
- 非线性光学散射偏微分方程组的matlab求解仿真
- IDEA使用AVD Manager创建AVD
- Android源码分析 - Parcel 与 Parcelable
- 使用Apache Spark SQL探索标普500和石油价格
- 如何判断自己是不是社恐?
- 学校计算机使用维护管理制度,计算机教室使用管理制度
热门文章
- 机器学习 贝叶斯分类器 拉普拉斯修正
- pvs-stdio ue4_云中的PVS-Studio:Azure DevOps
- 小朋友把游戏藏在计算机里,给两、三岁宝宝的60个超简单家庭早教游戏
- JAVA游戏土行孙_《封神榜》土行孙,被誉为国内最知名矮星,现惨淡靠低保度日...
- 知识图谱实体预测任务如何计算filtered MRR
- 水性建筑涂料行业调研报告 - 市场现状分析与发展前景预测
- 通过FAI进行全自动安装
- 欢迎清风艾艾在ITPUB博客安家!
- 苹果电脑上装Windows7
- P1357 食物链(一)