【题解】P3939 数颜色

不要数据结构和模板学傻了...

考虑到兔子们交换都是相邻的,说明任何一次交换只会引起\(O(1)\)的变化。

我们开很多\(vector\)存没种兔子的下标就好了。到时候二分查找查询。

复杂度\(O(nlogn)\)

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<queue>
#include<bitset>
#include<vector>
#include<map>
#include<ctime>
#include<cstdlib>
#include<set>
#include<bitset>
#include<stack>
#include<list>
#include<cmath>
using namespace std;
#define RP(t,a,b) for(register int (t)=(a),edd_=(b);t<=edd_;++t)
#define DRP(t,a,b) for(register int (t)=(a),edd_=(b);t>=edd_;--t)
#define ERP(t,a) for(int t=head[a];t;t=e[t].nx)
#define Max(a,b) ((a)<(b)?(b):(a))
#define Min(a,b) ((a)<(b)?(a):(b))
#define TMP template<class ccf>
typedef long long ll;
TMP inline ccf qr(ccf k){char c=getchar();ccf x=0;int q=1;while(c<48||c>57)q=c==45?-1:q,c=getchar();while(c>=48&&c<=57)x=x*10+c-48,c=getchar();if(q==-1)x=-x;return x;
}
const int maxn=3e5+15;
int data[maxn];
vector < int > col[maxn];
int n,m;
inline int div(vector < int >& p,int lb,int rb,int k){// to lbint mid;int ret=0;do{mid=(lb+rb)>>1;if(p[mid]>=k)rb=mid-1,ret=mid;elselb=mid+1;}while(lb<=rb);return ret;
}inline int div2(vector < int > &p,int lb,int rb,int k){int ret=-1;int mid;do{mid=(lb+rb)>>1;if(p[mid]<=k)lb=mid+1,ret=mid;elserb=mid-1;}while(lb<=rb);return ret;
}inline void upd(int c,int pos,int to){int ret=div(col[c],0,col[c].size()-1,pos);if(ret<0)return void(cout<<"err!\n");col[c][ret]=to;
}inline int cnt(int c,int lb,int rb){int ret=0;int siz=col[c].size()-1;if(siz<0)return 0;if(rb<col[c][0])return 0;if(lb>col[c][siz])return 0;ret+=div2(col[c],0,siz,rb);ret-=div(col[c],0,siz,lb);return ret+1;
}int t1,t2,t3,t4;
int main(){
#ifndef ONLINE_JUDGEfreopen("in.in","r",stdin);freopen("out.out","w",stdout);
#endifn=qr(1);m=qr(1);RP(t,1,n){data[t]=qr(1);col[data[t]].push_back(t);}RP(t,1,m){t1=qr(1);if(t1==1){t2=qr(1);t3=qr(1);t4=qr(1);cout<<cnt(t4,t2,t3)<<endl;}else{t2=qr(1);if(data[t2]==data[t2+1])continue;else{upd(data[t2],t2,t2+1);upd(data[t2+1],t2+1,t2);swap(data[t2],data[t2+1]);}}}return 0;
}

转载于:https://www.cnblogs.com/winlere/p/10333361.html

【题解】P3939数颜色相关推荐

  1. P3939 数颜色 (权值线段树)

    题目链接: P3939 数颜色 大致题意 略 解题思路 权值线段树 对于这个题, 由于询问的是, 对于c颜色, [l, r]区间有多少该颜色的兔子. 相当于每次询问的就是一种颜色的区间查询. 假设颜色 ...

  2. 洛谷P3939 数颜色 vector乱搞

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

  3. [国家集训队]数颜色

    [国家集训队]数颜色 题解 很水的一道带修莫队板子题. 我们只需要将操作时间看作是当前询问的第三维,排序后跑莫队即可. 三维莫队块长为n23n^{\frac{2}{3}}n32​时时间复杂度是最优的, ...

  4. python使用matplotlib可视化:设置坐标轴的范围、设置主次坐标轴刻度、坐标轴刻度显示样式、坐标轴刻度数颜色、小数点位数、坐标轴刻度网格线、线条类型、数据点形状标签、文本字体、颜色、大小等

    python使用matplotlib可视化:设置坐标轴的范围.设置主次坐标轴刻度.坐标轴刻度显示样式.坐标轴刻度数颜色.小数点位数.坐标轴刻度网格线.线条类型.数据点形状标签.文本字体.颜色.大小等 ...

  5. BZOJ2120 数颜色 【带修改莫队】

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

  6. The 2020 ICPC Asia Macau Regional Contest J. Jewel Grab(数颜色+链表)

    J. Jewel Grab Tartarus _Wallace_ 转化询问:对于一个询问 [s,k],找到一个最长的区间 [s,t],满足区间中出现次数超过一次的元素,的出现次数减一,的和,不超过 k ...

  7. 2120: 数颜色(带修莫队)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2120 2120: 数颜色 Time Limit: 6 Sec  Memory Limit ...

  8. 【算法讲20:Dsu on Tree】树上数颜色 | Lomsat gelral

    [算法讲20:Dsu on Tree] [例一:树上数颜色] · 暴力做法 · · 考虑优化 · ⌈ D s u o n T r e e ⌋ \lceil Dsu\ on\ Tree\rfloor ⌈ ...

  9. 莫队入门例题之持久化莫队:2120: 数颜色

    ·述大意:        多个区间询问,询问[l,r]中颜色的种类数.可以单点修改颜色. ·分析: 莫队可以修改?那不是爆炸了吗. 这类爆炸的问题被称为带修莫队(可持久化莫队). 按照美妙类比思想,可 ...

  10. 题解-路径数+算法-回荡dp

    题解-路径数+算法-回荡dp Description 题目背景 Euphemia\texttt{Euphemia}Euphemia 到一个 N×NN\times NN×N 的药草田里采药,她从左上角的 ...

最新文章

  1. CentOS中Jenkins的下载、安装、配置与启动(图文教程)
  2. 自定义复制和新建的文件名
  3. boost::locale::calendar用法的测试程序
  4. Codeforces Global Round 11——E随机+线性基待补
  5. 傲游浏览器记事本怎么打开
  6. nacl溶解度_运用溶解度曲线判断混合物分离、提纯的方法
  7. Dart基础第6篇:集合类型List Set Map详解 以及循环语句 forEach map where any every
  8. 三十一、K8s供应链安全2 - 镜像的检测及优化与yaml文件安全
  9. Egret入门学习日记 --- 第十一篇(书中 4.1~4.6节 内容)
  10. mac安装win7之后鼠标失灵_苹果电脑装win7后键盘鼠标没有反应未响应的解决方法...
  11. 对话乔会君丨两年服务1700家企业,洪泰智造如何锻造下一个独角兽?
  12. Call to a member function validate() on null
  13. 【位运算】系列题目合集
  14. MATLAB教室人数统计开源代码(包含 GUI 注释 课题分析)
  15. dagger2 android封装,Dagger2 Android应用:@Component和@Module
  16. 【Beta阶段】第二次Scrum Meeting
  17. 如何制作电视展示艺术品(或全家福)
  18. 生物信息学 linux版本,学生物的为啥要学点生物信息学!
  19. 常用的RS-485总线,详细讲解来啦!
  20. java access jdbc_Java jdbc连接Access数据库的方法学习(ucanaccess驱动)

热门文章

  1. 软件安装-----Windows下虚拟机的安装
  2. 什么是“系统空闲进程”,为什么使用那么多的CPU?
  3. 69期-Java SE-036_MySQL-7 SQL练习 -doing
  4. CF755F PolandBalls and Gifts
  5. led灯条串联图_一种串联控制LED灯条的制作方法
  6. fatal: unable to access ...: LibreSSL SSL_connnect: Connection reset by peer in connect to... :443
  7. Druid——Hadoop-based Batch Ingestion
  8. mysql implode_PHP implode() 函数
  9. rop检查_【国际高影响力文章红毯秀7月】白内障扩瞳安全性、ROP筛查新标准、45mmHg眼内灌注压...
  10. 《搞不定人,你如何带团队?》读书记录