tzhpxc
#include<bits/stdc++.h>
using namespace std;
int nxt[200100],las[200100],ct,va[200010],pos[410],n,m,num[410][100010],bs,c2;
int get(int x){
if(x%bs0)return x/bs;
return x/bs+1;
}
void del(int x){
int nv=nxt[nxt[x]];
las[nv]=x;
nxt[x]=nv;
}
void ins(int x,int y){
ct++;
if(!las[x]){
nxt[ct]=x;
las[x]=ct;
va[ct]=y;
return;
}
int lv=las[x];
nxt[ct]=x;
las[x]=ct;
nxt[lv]=ct;
las[ct]=lv;
va[ct]=y;
}
int main(){
//freopen(“queue.in”,“r”,stdin);
//freopen(“queue.out”,“w”,stdout);
scanf("%d%d",&n,&m);
ct=1;
bs=sqrt(n);
if(bs*bs!=n)bs++;
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
int ls=ct++;
las[ct]=ls;
nxt[ls]=ct;
va[ct]=a;
num[get(i)][a]++;
}
int x=2;
for(int i=1;i<=n;i++){
if((i-1)%bs0)pos[++c2]=x;
x=nxt[x];
}
while(m–){
int op,l,r,k;
scanf("%d%d%d",&op,&l,&r);
if(op1){
int ll,rr;
if(lr)continue;
if((l-1)%bs0)ll=(l-1)/bs+1;
else ll=(l-1)/bs+2;
rr=(r-1)/bs+1;
if(ll>rr){
ll=rr;
int x=pos[ll],y;
for(int i=(ll-1)*bs+1;i<l;i++)
x=nxt[x];
y=x;
for(int i=1;i<=r-l;i++)
y=nxt[y];
int tv=va[x];
x=las[x];
del(x);
ins(y,tv);
continue;
}
else if((r-1)%bs!=0){
int x=pos[rr],y=pos[ll],tv;
for(int i=(rr-1)*bs+1;i<r-1;i++)
x=nxt[x];
tv=va[nxt[x]];
for(int i=l;i<=(ll-1)*bs;i++)
y=las[y];
num[rr][tv]–;
del(x);
ins(y,tv);
if(ll!=1)num[ll-1][tv]++;
for(int i=ll;i<=rr;i++){
int lv=va[las[pos[i]]];
num[i][lv]++;
if(i!=1)num[i-1][lv]–;
pos[i]=las[pos[i]];
}
}
else{
int x=pos[rr],y=pos[ll],tv;
tv=va[x];
for(int i=l;i<=(ll-1)*bs;i++)
y=las[y];
num[rr][va[las[x]]]++;
num[rr-1][va[las[x]]]–;
num[rr][tv]–;
pos[rr]=las[pos[rr]];
del(pos[rr]);
ins(y,tv);
if(ll!=1)num[ll-1][tv]++;
for(int i=ll;i<rr;i++){
int lv=va[las[pos[i]]];
num[i][lv]++;
if(i!=1)num[i-1][lv]–;
pos[i]=las[pos[i]];
}
}
}
if(op2){
scanf("%d",&k);
int ll,rr,ans=0;
if((l-1)%bs==0)ll=(l-1)/bs+1;
else ll=(l-1)/bs+2;
rr=(r-1)/bs+1;
int x=pos[rr],y=pos[ll];
if(ll>rr){
ll=rr;
int x=pos[ll],ans=0;
for(int i=(ll-1)*bs+1;i<l;i++)
x=nxt[x];
if(va[x]==k)ans++;
for(int i=1;i<=r-l;i++){
x=nxt[x];
if(va[x]==k)ans++;
}
printf("%d\n",ans);
continue;
}
for(int i=(rr-1)*bs+1;i<=r;i++){
if(va[x]==k)ans++;
x=nxt[x];
}
y=las[y];
for(int i=l;i<=(ll-1)*bs;i++){
if(va[y]==k)ans++;
y=las[y];
}
for(int i=ll;i<rr;i++)
ans+=num[i][k];
printf("%d\n",ans);
}
}
}
tzhpxc的更多相关文章
随机推荐
- 将html转换成image图片png格式
import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics ...
- 如何处理好前后端分离的 API 问题(转载自知乎)
9 个月前 API 都搞不好,还怎么当程序员?如果 API 设计只是后台的活,为什么还需要前端工程师. 作为一个程序员,我讨厌那些没有文档的库.我们就好像在操纵一个黑盒一样,预期不了它的正常行为是什么 ...
- 13 Maven 编写插件
Maven 编写插件 Maven 的任何行为都是由插件完成的,包括项目的清理.绵编译.测试以及打包等操作都有其对应的 Maven 插件.每个插件拥有一个或者多个目标,用户可以直接从命令行运行这些插件目 ...
- abp 的坑
多数据库连接问题 viewmodel的验证问题 发布后,一段查找sln查找代码无法适用生产环境问题 多语言问题,默认中文设置与模板配置文件不统一
- java Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong name: pm/main)
javac main.java 编译后没有问题 java main 出现下面在问题: Exception in thread "main" java.lang.NoClassDef ...
- 2018.06.30 BZOJ 3932: [CQOI2015]任务查询系统(主席树)
3932: [CQOI2015]任务查询系统 Time Limit: 20 Sec Memory Limit: 512 MB Description 最近实验室正在为其管理的超级计算机编制一套任务管理 ...
- Django入门与实践-第18章:访问已登录用户(完结)
http://127.0.0.1:8000/boards/1/topics/1/ #boards/views.py @login_required def new_topic(request, pk) ...
- web前端技术合集
视频课程包含: 微服务精品课程包含:Ajax和Jquery基础入门视频.ajax教程.css视频教程.JQuery视频教程.MUI快速混合APP开发-视频.vuejs教程.极客学院HTML5全套教程. ...
- 用python实现各种排序算法
最简单的排序有三种:插入排序,选择排序和冒泡排序.它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了. 贴出源代码: 插入排序: def insertion_sort(sort_list) ...
- 动态链接库编程:非MFC DLL
设计一个DLL,内含一个函数计算a+b: DLL的组成 .h(头文件) 定义了DLL能够导出的函数.数据结构或类的声明,该文件的声明内容在.CPP文件中实现,而.CPP的源程序被封装到DLL文件中 . ...