基本思路和蒲公英一样

还是预处理出每两个块间的答案

询问时暴力跑两边的贡献

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<vector>
#include<ctime>
#include<algorithm>
#define N 100005
using namespace std;
int n,m,c,nn,tot,a[N],be[N],f[4000][4000],tim[N];
bool bo[N],flag[N];
vector <int> q[N];
void init(){
int ans;
for(int i=1;i<=tot;i++){
memset(bo,0,sizeof bo); ans=0;
memset(flag,0,sizeof flag);
for(int j=(i-1)*nn+1;j<=n;j++){
if(!flag[a[j]]){
flag[a[j]]=1; bo[a[j]]=1;
}
else{
if(!bo[a[j]]){bo[a[j]]=1;ans--;}
else{bo[a[j]]=0;ans++;}
}
if(!(j%nn)||j==n) f[i][be[j]]=ans;
}
}
}
int getnum(int l,int r,int x){
return upper_bound(q[x].begin(),q[x].end(),r)-lower_bound(q[x].begin(),q[x].end(),l);
}
int query(int l,int r,int ii){
int ans=0,t,tt;
if(be[l]==be[r]){
for(int i=l;i<=r;i++){
if(tim[a[i]]!=ii){
tim[a[i]]=ii;
t=getnum(l,r,a[i]);
if(t>0&&(!(t&1))) ans++;
}
}
return ans;
}
ans=f[be[l]+1][be[r]-1];
for(int i=l;i<=be[l]*nn;i++){
if(tim[a[i]]!=ii){
tim[a[i]]=ii;
t=getnum(l,r,a[i]);
tt=getnum(be[l]*nn+1,(be[r]-1)*nn,a[i]);
if(t!=0){
if((tt==0)&&(!(t&1))) ans++;
else if(tt!=0&&(1&t)!=(1&tt)){
if((t&1)) ans--;
else ans++;
}
}
}
}
for(int i=(be[r]-1)*nn+1;i<=r;i++){
if(tim[a[i]]!=ii){
tim[a[i]]=ii;
t=getnum(l,r,a[i]);
tt=getnum(be[l]*nn+1,(be[r]-1)*nn,a[i]);
if(t!=0){
if((tt==0)&&(!(t&1))) ans++;
else if(tt!=0&&(1&t)!=(1&tt)){
if((t&1)) ans--;
else ans++;
}
}
}
}
return ans;
}
int main()
{
scanf("%d%d%d",&n,&c,&m);
nn=(int)(n/(sqrt(8*m*log2(n))));
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
be[i]=(i-1)/nn+1;
q[a[i]].push_back(i);
}
tot=be[n]; init();
//printf("%0.2lf\n",(double)clock()/CLOCKS_PER_SEC);
int ans=0,l,r;
for(int i=1;i<=m;i++){
scanf("%d%d",&l,&r);
l=(l+ans)%n+1;
r=(r+ans)%n+1;
if(l>r) swap(l,r);
ans=query(l,r,i);
printf("%d\n",ans);
}
return 0;
}

bzoj 2821 作诗 分块的更多相关文章

  1. 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 ...

  2. [BZOJ 2821] 作诗(Poetize) 【分块】

    题目链接:BZOJ - 2821 题目分析 因为强制在线了,所以无法用莫队..可以使用分块来做. 做法是,将 n 个数分成 n/x 个块,每个块大小为 x .先预处理出 f[i][j] ,表示从第 i ...

  3. [BZOJ 2821] 作诗

    Link: BZOJ 2821 传送门 Solution: 一道类似区间众数的经典分块 由于个数为偶数这样的条件不能支持快速合并 因此要先$O(n*sqrt(n))$预处理出$pre[i][j]$表示 ...

  4. BZOJ 2821作诗(Poetize) 分块

    Description 有一个长度为n的序列,序列每个元素的范围[1,c],有m个询问x y,表示区间[x,y]中出现正偶数次的数的种类数. Solution 大力分块解决问题. 把序列分块,f[i] ...

  5. 2821: 作诗(Poetize)

    2821: 作诗(Poetize) Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 1078  Solved: 348[Submit][Status] ...

  6. 洛谷P4135 作诗 (分块)

    洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...

  7. P4135 作诗——分块

    题目:https://www.luogu.org/problemnew/show/P4135 分块大法: 块之间记录答案,每一块记录次数前缀和: 注意每次把桶中需要用到位置赋值就好了: 为什么加了特判 ...

  8. [BZOJ2821]作诗(分块)

    题意 N个数,M组询问,每次问[l,r]中有多少个数出现正偶数次对于100%的数据,1≤n,c,m≤105 题解 (传说lyd省选的时候看错题   把题看成这个了   从此又多了一道分块神题)把N个数 ...

  9. 【分块】BZOJ2821 作诗(Poetize)

    2821: 作诗(Poetize) Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 3265  Solved: 951[Submit][Status][ ...

随机推荐

  1. iOS苹果自带UIMenuController

    一.UIMenuController认识 1.默认情况下,UITextView / UITextFiled / UIWebView 都有苹果自带的有UIMenuController功能 2.UITex ...

  2. JQuery常用功能的性能优化

    使用最佳选择器 通常比较常用的选择器有以下几个: 1.ID选择器 $("#id") 2.标签选择器 $("td") 3.类选择器 $(".target ...

  3. springMVC 中的restful 架构风格

    RESTful架构 : 是一种设计的风格,并不是标准,只是提供了一组设计原则和约束条件,也是目前比较流行的一种互联网软件架构.它结构清晰.符合标准.易于理解.扩展方便,所以正得到越来越多网站的采用. ...

  4. WebSocket 和 Golang 实现聊天功能

    http://www.open-open.com/lib/view/open1416379948711.html 这个示例应用程序展示了如何使用 WebSocket, Golang 和 jQuery  ...

  5. [ Java面试题 ]基础篇之一

    1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...

  6. 畅通工程-HZNU寒假集训

    畅通工程 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程"的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只 ...

  7. c#与webapi交互

    public static string HttpConnectToServer(string ServerPage,string strData) { string postData =strDat ...

  8. spring cloud 入门系列六:使用Zuul 实现API网关服务

    通过前面几次的分享,我们了解了微服务架构的几个核心设施,通过这些组件我们可以搭建简单的微服务架构系统.比如通过Spring Cloud Eureka搭建高可用的服务注册中心并实现服务的注册和发现: 通 ...

  9. Hystrix 熔断机制原理

    相关配置 circuitBreaker.enabled 是否开启熔断 circuitBreaker.requestVolumeThreshold 熔断最低触发请求数阈值 circuitBreaker. ...

  10. FPGA中的除法运算及初识AXI总线

    FPGA中的硬件逻辑与软件程序的区别,相信大家在做除法运算时会有深入体会.硬件逻辑实现的除法运算会占用较多的资源,电路结构复杂,且通常无法在一个时钟周期内完成.因此FPGA实现除法运算并不是一个&qu ...