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的更多相关文章
随机推荐
- Golang之定时器,recover
滴答滴答……定时器的使用 package main import ( "fmt" "time" ) //定时器的使用 func main() { t := ti ...
- Linux gprof命令
一.简介 gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂. ...
- 神奇的照片修复术,这才是 PS 的正确打开方式!
蒲公英种子从远处飘回 聚成伞的模样 太阳从西边升起 落向东方 运动员回到起跑线上 轰鸣的火车退回家乡 雪花纷飞 飘向天际 我沉入梦乡 你还在我身旁 ——公益广告 大概只有时光倒流,我们才能回到那些每天 ...
- Spring 学习记录3 ConversionService
ConversionService与Environment的关系 通过之前的学习(Spring 学习记录2 Environment),我已经Environment主要是负责解析properties和p ...
- FTP中各文件目录的说明
DirectAdmin:FTP中各文件目录的说明 当您使用FTP连上空间后,FTP列表会出现以下文件和目录: domains目录:网站文件存放目录:public_html目录:快捷目录,可以快 ...
- 实现WIFI MAC认证与漫游
前言 单位里有10来个网件的AP(WNAP210),需要对接入端(主要是手机)进行MAC认证,原来采用AP本地MAC认证,但是人员经常变动(离职),另外人员的岗位(流水线)也经常调整,这样就需在变动后 ...
- ESP8266-01一些内容
系统有些指令必须特性状态下才可以执行,即先执行一些其它AT指令 1.设置station模式的IP信息 AT+CIPSTA="192.168.19.1","192.168. ...
- docker 命令介绍
查看镜像 docker images: 列出imagesdocker images -a :列出所有的images(包含历史)docker images --tree :显示镜像的所有层(layer) ...
- (并查集)A Bug's Life -- POJ -- 2492
链接: http://poj.org/problem?id=2492 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82830#probl ...
- 作为CTO如何做技术升级
升级技术架构,先要革新观念,最后才是技术问题 升级技术架构,不仅仅是技术升级 说到升级架构,大家第一个都会想到,是不是对技术升级一下就可以了? 我认为不是,技术架构升级要求的是整个公司的升级. 技术架 ...