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的更多相关文章
随机推荐
- js验证input输入正整数 和 输入的金额小数点后保留两位(PC端键盘输入)
// 验证开头不为零的正整数 WST.zhengZhengShuIn = function (className){ var rex = /^[1-9]{1}[0-9]*$/;//正整数 $(&quo ...
- Linux dkpg命令
一.简介 dpkg 是Debian Package 的简写,是Debian系列系统下的一个软件安装.更新及移除工具. 二.常用指令 1.查询功能 查看软件包信息: dpkg -info xxx.deb ...
- [freeCodeCamp] solution to JUGGLING ASYNC
Here's the official solution in case you want to compare notes: var http = require('http') var bl = ...
- Flask源码剖析详解
1. 前言 本文将基于flask 0.1版本(git checkout 8605cc3)来分析flask的实现,试图理清flask中的一些概念,加深读者对flask的理解,提高对flask的认识.从而 ...
- Vue.js2 + Laravel5 采用 CORS 方式解决 AJAX 跨域的问题
一.建立中间件 php artisan make:middleware CorsAjax 二.编写中间件 CorsAjax <?phpnamespace App\Http\Middleware; ...
- ip白名单 通过* ? 检测IP匹配 轻量级
#include "stdafx.h" #include <windows.h> #include <string.h> #include <asse ...
- 删除pdf文件所有超链接
最近在读deep learning 书Bengio那本,在Github上面下载的,下载回来全都是超链接, 超级烦,比如点一下梯度下降法,就直接跳转到数后尾的index. 我看书还喜欢老点,所以要把他们 ...
- 开始Java之旅
从今天起,cgg将给大家讲讲Java这种神奇的东西. 至于配置环境变量,大家可以看看我的博客:环境变量上面有详细解释. 下面先给大家一个公式: public class [文件名]{ ...
- 2018.09.29 bzoj3166: [Heoi2013]Alo(01trie+双向链表)
传送门 01trie经典题目. 我们可以通过计算每个数作为次小值时对答案的贡献. 显然对于每个iii需要求出一个包含a[i]a[i]a[i]且的区间[l,r][l,r][l,r]且区间所有值都小于a[ ...
- Nginx upstream的5种权重分配方式(转)
出处:http://www.cnblogs.com/funsion/p/4003499.html?utm_source=tuicool 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器, ...