#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的更多相关文章

随机推荐

  1. 在windows系统下安装oracle 11g

     oracle 11g 安装在windows server 2012 系统下. 最近,需要配置数据库,要求在windows操作系统下,安装oracle 11g 数据库,因为以前没有安装过,所以成功后, ...

  2. laravel表单提交

    1.控制器->路由->视图 2.视图 3.控制器

  3. Laravel 5 如何对部份 URI 禁用 CSRF 验证

    打开中间件 VerifyCsrfToken.php 在其 $except 属性中添加要禁用的 uri,如: api/user/add api/user/* api/*

  4. [原创] 分享一下Sencha 三种环境(开发环境、测试环境、生产环境)的优雅配置方案

    背景介绍: 在一个AspNet MVC Web API的后端Web开发项目中,使用了Sencha6.5+作为前端表现技术. 在进行两种开发框架的物理文件整合的时候,笔者不想把他俩的物理文件都“揉”在一 ...

  5. 2018.09.08 NOIP模拟trip(最长链计数)

    差不多是原题啊. 求最长链变成了最长链计数,其余没有变化. 这一次考试为了保险起见本蒟蒻还是写了上次没写的辅助数组. 代码: #include<bits/stdc++.h> #define ...

  6. linux CentOS 7 安装 RabbitMQ Erlang 21.0

    1. 安装erlang 安装依赖环境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixO ...

  7. s28 LNMP架构服务搭建

    nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...

  8. WPF图形图像相关类

    BitmapMetadata类: 继承自抽象类ImageMetadata,包含图像的原数据信息,如相机型号.图像修改程序名称.拍照日期.拍照地点等.ImageSoure类包含ImageMetadata ...

  9. Scrapy爬取美女图片第三集 代理ip(上) (原创)

    首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...

  10. web api解决序列化后返回标准时间带T问题

    添加类: public class JsonDataTimeConverter:IsoDateTimeConverter     {        public JsonDataTimeConvert ...