bzoj2821: 作诗(Poetize)
分块
分sqrt(n)块
F[i][j]表示块i到块j的答案
s[i][j]表示数字i在前j块内出现了几次
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#define N 100005
#define M 233
#define L(x) (n*((x)-1)/m+1)
#define R(x) (n*(x)/m) using namespace std;
inline int read(){
int ret=0;char ch=getchar();
while (ch<'0'||ch>'9') ch=getchar();
while ('0'<=ch&&ch<='9'){
ret=ret*10-48+ch;
ch=getchar();
}
return ret;
} int n,a[N],l;
int bl[N],m;
int F[M][M];
int s[N][M];
int cnt[N]; void precompute(){
m=min((int)sqrt(n),230);
memset(cnt,0,sizeof(cnt));
for (int i=1;i<=m;++i){
for (int j=L(i);j<=R(i);++j){
bl[j]=i;++cnt[a[j]];
}
for (int j=1;j<=l;++j) s[j][i]=cnt[j];
}
memset(F,0,sizeof(F));
for (int i=1;i<=m;++i){
memset(cnt,0,sizeof(cnt));
int now=0;
for (int j=i;j<=m;++j){
for (int k=L(j);k<=R(j);++k){
if ((++cnt[a[k]])<2) continue;
now-=(cnt[a[k]]&1)*2-1;
}
F[i][j]=now;
}
}
memset(cnt,0,sizeof(cnt));
} int query(int l,int r){
int now=F[bl[l]+1][bl[r]-1];
if (bl[l]==bl[r]){
for (int i=l;i<=r;++i){
if ((++cnt[a[i]])<2) continue;
now-=(cnt[a[i]]&1)*2-1;
}
for (int i=l;i<=r;++i) --cnt[a[i]];
return now;
}
for (int i=l;i<=r;i=(i==R(bl[l])?L(bl[r]):(i+1))){
if ((++cnt[a[i]])+s[a[i]][bl[r]-1]-s[a[i]][bl[l]]<2) continue;
now-=((cnt[a[i]]+s[a[i]][bl[r]-1]-s[a[i]][bl[l]])&1)*2-1;
}
for (int i=l;i<=r;i=(i==R(bl[l])?L(bl[r]):(i+1))) --cnt[a[i]];
return now;
} int main(){
n=read();l=read();int Q=read(),ans=0;
for (int i=1;i<=n;++i) a[i]=read();
precompute();
while (Q--){
int x=(read()+ans)%n+1,y=(read()+ans)%n+1;
printf("%d\n",ans=query(min(x,y),max(x,y)));
} return 0;
}
bzoj2821: 作诗(Poetize)的更多相关文章
- BZOJ2821 作诗(Poetize) 【分块】
BZOJ2821 作诗(Poetize) Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI ...
- 【分块】BZOJ2821 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3265 Solved: 951[Submit][Status][ ...
- BZOJ2821 作诗(Poetize) 主席树 bitset
原文链接https://www.lydsy.com/JudgeOnline/problem.php?id=2821 题目传送门 - BZOJ2821 题意 $n$ 个数,$m$ 组询问,每次问 $[l ...
- BZOJ2821 作诗(Poetize) 分块
题意 算法 经验总结 代码 题意 不带修改,查询数列[1,n]中[l,r]内的出现正偶数次的数的个数, 数列中的数 <= 1e5, n <= 1e5, 强制在线 算法 查询的内容: 区 ...
- 2018.09.30 bzoj2821: 作诗(Poetize)(分块)
传送门 分块经典题目. 先将数列分块. 然后预处理出每两个块之间有多少个数出现了正偶数次. 这样查询的时候对于中间的完整块直接用预处理出的数组搞定. 剩下的暴力枚举求解. 代码: #include&l ...
- 2821: 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1078 Solved: 348[Submit][Status] ...
- BZOJ 2821: 作诗(Poetize)( 分块 )
分块,分成N^0.5块.O(N^1.5)预处理出sm[i][j]表示前i块中j的出现次数, ans[i][j]表示第i~j块的答案. 然后就可以O(N^0.5)回答询问了.总复杂度O((N+Q)N^0 ...
- BZOJ_2821_作诗(Poetize)_分块
BZOJ_2821_作诗(Poetize)_分块 Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗 之后还要 ...
- 【BZOJ2821】作诗(Poetize) 分块
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...
随机推荐
- 基于jquery的消息提示框toastr.js
//消息提示全局配置 toastr.options = { "closeButton": false,//是否配置关闭按钮 "debug": false,//是 ...
- iOS UITableView 分割线从零开始
第一种(不自己画线): 代码如下 // tableView的分割线从零开始 -(void)viewDidLayoutSubviews { if ([self.tableView respondsToS ...
- 封装jQuery Validate扩展验证方法
一.封装自定义验证方法-validate-methods.js /***************************************************************** j ...
- 产品需求文档(PRD)的写作方法之笔记一
1.写前准备(思维导图): http://www.woshipm.com/?p=80070 1.在写之前,请先很区分清楚什么是MRD文档(市场需求文档),BRD文档(商业需求文档),什么是PRD文档( ...
- MakeCode 递归生成资源文件
static void yieldDir(DirectoryInfo dir, int depth, StringBuilder sb1, StringBuilder sb2) { var first ...
- Android开篇(转)
转自:http://gityuan.com/android/ 一.简述 Android系统非常庞大.错中复杂,其底层是采用Linux作为基底,上层采用包含虚拟机的Java层以及Native层,通过系统 ...
- junit
junit测试代码也视为开发内容的一部分,强烈建议在开发过程中编写junit代码作为开发调试工具,用junit调试代码不需要启动应用服务器,实际上会加快开发速度.
- 移动端打印调试插件 - debug.js 介绍
前文中我们学习过,用 Fiddler 作为代理可以在移动端打开本地的页面进行查看(如何用 fiddler 代理调试本地手机页面),但是对于 js 的调试却无能为力(需要借助其他调试手段,比如 UC浏览 ...
- VS2010+MVC4+Spring.NET2+NHibernate4-传统三层架构-前篇
VS2010+MVC4+Spring.NET2+NHibernate4 - 传统三层架构 - 前篇 一直追求使用开源项目,就因一个字:懒! 一直想整理一下的,却一直懒到现在!从当初用的MVC3到现在的 ...
- 订餐系统之定时器Timer不定时
经过几天漫长的问题分析.处理.测试.验证,定时器Timer终于定时了,于是开始了这篇文章,希望对还在纠结于“定时器Timer不定时”的同学有所帮助,现在的方案,在系统日志中会有警告,如果您有更好的方案 ...