核心内容摘要
免费皮肤软件“积积通肤肤”:解锁你的虚拟世界无限可能!
P3939 数颜色题目背景大样例可在页面底部「附件」中下载。
题目描述小 C 的兔子不是雪白的而是五彩缤纷的。
每只兔子都有一种颜色不同的兔子可能有相同的颜色。
小 C 把她标号从 1 到n nn的n nn只兔子排成长长的一排来给他们喂胡萝卜吃。
排列完成后第i ii只兔子的颜色是a i a_iai。
俗话说得好“萝卜青菜各有所爱”。
小 C 发现不同颜色的兔子可能有对胡萝卜的不同偏好。
比如银色的兔子最喜欢吃金色的胡萝卜金色的兔子更喜欢吃胡萝卜叶子而绿色的兔子却喜欢吃酸一点的胡萝卜……为了满足兔子们的要求小 C 十分苦恼。
所以为了使得胡萝卜喂得更加准确小 C 想知道在区间[ l j , r j ] [l_j,r_j][lj,rj]里有多少只颜色为c j c_jcj的兔子。
不过因为小 C 的兔子们都十分地活跃它们不是很愿意待在一个固定的位置与此同时小 C 也在根据她知道的信息来给兔子们调整位置。
所以有时编号为x j x_jxj和x j 1 x_j1xj1的两只兔子会交换位置。
小 C 被这一系列麻烦事给难住了。
你能帮帮她吗输入格式从标准输入中读入数据。
输入第 1 行两个正整数n nn,m mm。
输入第 2 行n nn个正整数第i ii个数表示第i ii只兔子的颜色a i a_iai。
输入接下来m mm行每行为以下两种中的一种“1 l j r j c j 1\ l_j\ r_j\ c_j1ljrjcj” 询问在区间[ l j , r j ] [l_j,r_j][lj,rj]里有多少只颜色为c j c_jcj的兔子“2 x j 2\ x_j2xj”x j x_jxj和x j 1 x_j1xj1两只兔子交换了位置。
输出格式输出到标准输出中。
对于每个 1 操作输出一行一个正整数表示你对于这个询问的答案。
输入输出样例 #1输入 #16 5 1 2 3 2 3 3 1 1 3 2 1 4 6 3 2 3 1 1 3 2 1 4 6 3输出 #11 2 2 3说明/提示【样例 1 说明】前两个 1 操作和后两个 1 操作对应相同在第三次的 2 操作后3 号兔子和 4 号兔子交换了位置序列变为 1 2 2 3 3 3。
【数据范围与约定】子任务会给出部分测试数据的特点。
如果你在解决题目中遇到了困难可以尝试只解 决一部分测试数据。
对于所有测试点有1 ≤ l j r j ≤ n , 1 ≤ x j n 1 \le l_j r_j \le n,1 \le x_j n1≤ljrj≤n,1≤xjn。
每个测试点的数据规模及特点如下表特殊性质 1保证对于所有操作 1有∣ r j − l j ∣ ≤ 20 |r_j - l_j| \le 20∣rj−lj∣≤20或∣ r j − l j ∣ ≤ n − 20 |r_j - l_j| \le n - 20∣rj−lj∣≤n−20。
特殊性质 2保证不会有两只相同颜色的兔子。
C实现#includeiostream#includecstdio#includecstring#includecmath#includevector#includealgorithmusingnamespacestd;intread(){intw1,x0,chgetchar();for(;ch0||ch9;chgetchar())if(ch-)w-1;for(;ch0ch9;chgetchar())xx*10ch-0;returnx*w;}constintMAXN(int)3e5100;intn,m,a[MAXN];vectorintq[MAXN];intopt,l,r,x;intmain(){nread(),mread();for(inti1;in;i){a[i]read();q[a[i]].push_back(i);}while(m--){optread();if(opt