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的更多相关文章
随机推荐
- 在windows系统下安装oracle 11g
oracle 11g 安装在windows server 2012 系统下. 最近,需要配置数据库,要求在windows操作系统下,安装oracle 11g 数据库,因为以前没有安装过,所以成功后, ...
- laravel表单提交
1.控制器->路由->视图 2.视图 3.控制器
- Laravel 5 如何对部份 URI 禁用 CSRF 验证
打开中间件 VerifyCsrfToken.php 在其 $except 属性中添加要禁用的 uri,如: api/user/add api/user/* api/*
- [原创] 分享一下Sencha 三种环境(开发环境、测试环境、生产环境)的优雅配置方案
背景介绍: 在一个AspNet MVC Web API的后端Web开发项目中,使用了Sencha6.5+作为前端表现技术. 在进行两种开发框架的物理文件整合的时候,笔者不想把他俩的物理文件都“揉”在一 ...
- 2018.09.08 NOIP模拟trip(最长链计数)
差不多是原题啊. 求最长链变成了最长链计数,其余没有变化. 这一次考试为了保险起见本蒟蒻还是写了上次没写的辅助数组. 代码: #include<bits/stdc++.h> #define ...
- linux CentOS 7 安装 RabbitMQ Erlang 21.0
1. 安装erlang 安装依赖环境 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel unixO ...
- s28 LNMP架构服务搭建
nginx-location使用 location语法 location使用的语法例子为: location [=|~|~*|^~] uri{ 对location语法列表说明. |1ocation | ...
- WPF图形图像相关类
BitmapMetadata类: 继承自抽象类ImageMetadata,包含图像的原数据信息,如相机型号.图像修改程序名称.拍照日期.拍照地点等.ImageSoure类包含ImageMetadata ...
- Scrapy爬取美女图片第三集 代理ip(上) (原创)
首先说一声,让大家久等了.本来打算那天进行更新的,可是一细想,也只有我这样的单身狗还在做科研,大家可能没心思看更新的文章,所以就拖到了今天.不过忙了521,522这一天半,我把数据库也添加进来了,修复 ...
- web api解决序列化后返回标准时间带T问题
添加类: public class JsonDataTimeConverter:IsoDateTimeConverter { public JsonDataTimeConvert ...