CF 455D. Serega and Fun [分块 deque]
题意:
[l,r]循环右移一位,查询区间内某个数出现次数
为什么好多人用链表?反正我是不会写双向链表
完全可以分块然后模拟啊...中间的块只会插入删除一个元素呀....用deque就好了
虽然说deque常数大但是CF上标准库快啊
不用deque怎么做?可以每个块开一个$O(S)$大小的数组,然后每$S$个操作重建一次
一个非常奇怪的事情是$S=n^0.618$比$n^0.5$快了4倍多...300多ms
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <deque>
using namespace std;
typedef long long ll;
const int N=1e5+,M=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
} int n,Q,op,a[N]; int block,pos[N],m;
struct _Blo{int l,r,c[N];}b[M];
deque<int> q[M];
deque<int>::iterator it;
void ini(){
block=pow(n,0.618);
m=(n-)/block+;
for(int i=;i<=n;i++) pos[i]=(i-)/block+;
for(int i=;i<=m;i++) b[i].l=(i-)*block+, b[i].r=i*block;
b[m].r=n;
} struct Block{
void Set(int x){
for(int i=b[x].l ; i<=b[x].r ; i++) q[x].push_back(a[i]), b[x].c[a[i]]++;
}
void Cha(int l,int r){
int pl=pos[l],pr=pos[r];
int f= l-b[pl].l , g= r-b[pr].l , x=q[pr][g];
if(pl==pr){
q[pr].erase( q[pr].begin()+g ); q[pl].insert( q[pl].begin()+f , x );
}else{
q[pl].insert( q[pl].begin()+f , x ); b[pl].c[x]++;
q[pr].erase( q[pr].begin()+g); b[pr].c[x]--; for(int i=pl;i<pr;i++){
int x=q[i].back();
q[i].pop_back(); b[i].c[x]--;
q[i+].push_front(x); b[i+].c[x]++;
}
}
}
int Que(int l,int r,int k){
int pl=pos[l],pr=pos[r];
int f= l-b[pl].l , g= r-b[pr].l;
int ans=;
if(pl==pr){
for(int i=f ; i<=g ; i++) ans+= q[pl][i]==k;
}else{
for(int i=f ; i<(int)q[pl].size() ; i++) ans+= q[pl][i]==k;
for(int i= ; i<=g ; i++) ans+= q[pr][i]==k;
for(int i=pl+ ; i<pr ; i++) ans+= b[i].c[k];
}
return ans;
}
}B;
int main(){
//freopen("in","r",stdin);
n=read(); ini();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=m;i++) B.Set(i); Q=read(); int last=,l,r;
while(Q--){
op=read();
l=( read()+last- )%n+, r=( read()+last- )%n+;
if(l>r) swap(l,r);
if(op==) B.Cha(l,r);
else{
int k=( read()+last- )%n+;//printf("k %d\n",k);
last=B.Que(l,r,k);
printf("%d\n",last);
}
}
}
CF 455D. Serega and Fun [分块 deque]的更多相关文章
- 分块+deque维护 Codeforces Round #260 (Div. 1) D. Serega and Fun
D. Serega and Fun time limit per test 4 seconds memory limit per test 256 megabytes input standard i ...
- Codeforces Round #260 (Div. 1) D. Serega and Fun 分块
D. Serega and Fun Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/pro ...
- CF 86D Powerful array 【分块算法,n*sqrt(n)】
给定一个数列:A1, A2,……,An,定义Ks为区间(l,r)中s出现的次数. t个查询,每个查询l,r,对区间内所有a[i],求sigma(K^2*a[i]) 离线+分块 将n个数分成sqrt(n ...
- CF 551E. GukiZ and GukiZiana [分块 二分]
GukiZ and GukiZiana 题意: 区间加 给出$y$查询$a_i=a_j=y$的$j-i$最大值 一开始以为和论文CC题一样...然后发现他带修改并且是给定了值 这样就更简单了.... ...
- CF数据结构练习
1. CF 438D The Child and Sequence 大意: n元素序列, m个操作: 1,询问区间和. 2,区间对m取模. 3,单点修改 维护最大值, 取模时暴力对所有>m的数取 ...
- splay训练
1, CF 455D 2, CF 420D 3, CF 414E
- Serega and Fun CodeForces - 455D (分块 或 splay)
大意:给定n元素序列, 2种操作 将区间$[l,r]$循环右移1位 询问$[l,r]$中有多少个等于k的元素 现在给定q个操作, 输出操作2的询问结果, 强制在线 思路1: 分块 每个块内维护一个链表 ...
- CodeForces 455D 分块
题目链接:http://codeforces.com/problemset/problem/455/D 题意:给定一个长度为n的序列a[]. m次操作.共有两种操作 1 l r:将序列的a[l].a[ ...
- CF 13E. Holes 分块数组
题目:点这 跟这题BZOJ 2002: [Hnoi2010]Bounce 弹飞绵羊 一模一样 分析: 分块数组入门题. 具体的可以学习这篇博文以及做国家集训队2008 - 苏煜<对块状链表的一 ...
随机推荐
- 【笔记】nodejs读取JSON,数组转树
const fs = require('fs'); // --------------- 读取源文件 --------------- const originData = require('./vux ...
- Linux-vmware tools安装与cdrom挂载(转)
昨天想直接复制虚拟机centos系统中命令行的内容到主机的txt文档上进行保存,发现不能实现虚拟机与主机之间的直接通讯,后来查资料发现原来是由于我的虚拟机没有安装vwmare tools的缘故. 一个 ...
- angular 表达式与指令
angular表达式的一些特点 属性表达式: 属性表达式是对应于当前作用域,Javascript对应的是全局window对象. AngularJS要使用window作用域的话得用$window来指向全 ...
- c++---天梯赛---大笨钟
★题目: ★思路分析: 对可能的情况进行分类处理.在这里我把它们分成了3大类. ①不在敲钟时间 ②在敲钟时间但为整点 ③在敲钟时间且不为整点. 在敲钟时间段内我们可分别对晚8点前后进行分类讨论, 我们 ...
- win7下IIS的安装和配置
win7下IIS的安装和配置 图文教程,需要的朋友可以参考下 http://www.jb51.net/article/29787.htm 最近工作需要IIS,自己的电脑又是Windows7系统,找了下 ...
- APIs
应用程序接口(application programe interfaces)
- struts异常:Caused by: Parent package is not defined: json-default - [unknown location]解决办法
问题描述: Unable to load configuration. - [unknown location] at com.opensymphony.xwork2.config.Configura ...
- Nodejs+Grunt配置SASS项目自动编译
Nodejs+Grunt配置SASS项目自动编译 早前听说Nodejs和Grunt很强大,特别是用来构建自动化的前端开发,更是强大无比.但一直碍于自己掌握的技术有限,不敢深入,也未曾深入下去.最近在开 ...
- 用Express、MySQL搭建项目(接口以及静态文件获取、文件上传等)
一.简介 本文将主要基于node.js使用express框架搭建一个后台环境,包括如何自定义项目目录.所用依赖以及中间件.路由以及模板引擎.接口数据获取以及文件上传等内容. 二.后台环境搭建 1.新建 ...
- Django 发送邮件
问题: 对于一些错误信息或用户注册账号的时候,需要给用户发送邮件进行验证. 以用户注册发邮件为例子,用户向后端提起注册,后端收到用户邮箱,对邮箱格式进行验证,然后发送邮件,邮件内容中包括邮件标题.邮件 ...