洛谷 P4135 作诗
分块大暴力,跟区间众数基本一样
#pragma GCC optimize(3)
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int n,c,m,sz=,sz1;
int a[];
int be[],st[],ed[];
int nnm[][];
int ttt[],tt2[][];
int main()
{
int i,j,k,l,r,lans=,ans;
scanf("%d%d%d",&n,&c,&m);
//sz=sqrt(n);
sz1=(n-)/sz+;
for(i=;i<=n;i++) scanf("%d",&a[i]),be[i]=(i-)/sz+;
for(i=;i<sz1;i++) st[i]=(i-)*sz+,ed[i]=i*sz;
st[sz1]=(sz1-)*sz+,ed[sz1]=n;
for(i=;i<=sz1;i++)
{
memcpy(nnm[i],nnm[i-],sizeof(nnm[i]));
for(j=st[i];j<=ed[i];j++) nnm[i][a[j]]++;
}
for(i=;i<=sz1;i++)
{
memset(ttt,,sizeof(ttt));ans=;
for(j=i;j<=sz1;j++)
{
for(k=st[j];k<=ed[j];k++)
{
if(ttt[a[k]]&&ttt[a[k]]%==) ans--;
ttt[a[k]]++;
if(ttt[a[k]]&&ttt[a[k]]%==) ans++;
}
tt2[i][j]=ans;
}
}
memset(ttt,,sizeof(ttt));
while(m--)
{
scanf("%d%d",&l,&r);l=(l+lans)%n+;r=(r+lans)%n+;
if(l>r) swap(l,r);
if(be[l]+>=be[r])
{
ans=;
for(i=l;i<=r;i++)
{
if(ttt[a[i]]&&ttt[a[i]]%==) ans--;
ttt[a[i]]++;
if(ttt[a[i]]&&ttt[a[i]]%==) ans++;
}
printf("%d\n",ans);lans=ans;
for(i=l;i<=r;i++) ttt[a[i]]--;
}
else
{
ans=tt2[be[l]+][be[r]-];
for(i=l;i<=ed[be[l]];i++)
{
if(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]])%==) ans--;
ttt[a[i]]++;
if(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]])%==) ans++;
}
for(i=st[be[r]];i<=r;i++)
{
if(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]])%==) ans--;
ttt[a[i]]++;
if(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]]&&(ttt[a[i]]+nnm[be[r]-][a[i]]-nnm[be[l]][a[i]])%==) ans++;
}
printf("%d\n",ans);lans=ans;
for(i=l;i<=ed[be[l]];i++) ttt[a[i]]--;
for(i=st[be[r]];i<=r;i++) ttt[a[i]]--;
}
}
return ;
}
洛谷 P4135 作诗的更多相关文章
- 洛谷P4135 作诗 (分块)
洛谷P4135 作诗 题目描述 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章 ...
- 洛谷 P4135 作诗 题解
题面. 之前做过一道很类似的题目 洛谷P4168蒲公英 ,然后看到这题很快就想到了解法,做完这题可以对比一下,真的很像. 题目要求区间内出现次数为正偶数的数字的数量. 数据范围1e5,可以分块. 我们 ...
- 洛谷P4135 作诗
题意:[l,r]之间有多少个数出现了正偶数次.强制在线. 解:第一眼想到莫队,然后发现强制在线...分块吧. 有个很朴素的想法就是蒲公英那题的套路,做每块前缀和的桶. 然后发现这题空间128M,数组大 ...
- 洛谷 P4135 作诗(分块)
题目链接 题意:\(n\) 个数,每个数都在 \([1,c]\) 中,\(m\) 次询问,每次问在 \([l,r]\) 中有多少个数出现偶数次.强制在线. \(1 \leq n,m,c \leq 10 ...
- 洛谷P4135 作诗(不一样的分块)
题面 给定一个长度为 n n n 的整数序列 A A A ,序列中每个数在 [ 1 , c ] [1,c] [1,c] 范围内.有 m m m 次询问,每次询问查询一个区间 [ l , r ] [l, ...
- 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解
题面. 看到这道题,我第一反应就是莫队. 我甚至也猜出了把所有询问的三个区间压到一起处理然后分别计算对应询问答案. 但是,这么复杂的贡献用什么东西存?难道要开一个数组 query_appear_tim ...
- P4135 作诗——分块
题目:https://www.luogu.org/problemnew/show/P4135 分块大法: 块之间记录答案,每一块记录次数前缀和: 注意每次把桶中需要用到位置赋值就好了: 为什么加了特判 ...
- luogu P4135 作诗
嘟嘟嘟 郑重声明:我的前几到分块题写法上都有点小毛病,以这篇为主! 这道题感觉也是分块的基本套路,只不过卡常,得开氧气. 维护俩:sum[i][j]表示前 i 块中,数字 j 出现了多少次,ans[i ...
- P4135 作诗
传送门 分块 设sum[ i ] [ j ] 存从左边到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 存从第 i 块,到第 j 块的一整段的答案 那么最后答案就是一段区间中几块整段的 ...
随机推荐
- Python 学习资料分享
有同学需要学习 Python,确实,随着人工智能被炒的火热,再加上大数据时代,作为程序员的我们,怎么可能坐得住,必须尝尝鲜,给自己增加一项技能,增加自己的竞争了. 内容定位 这方面的学习资料比较多,本 ...
- 嵌入式驱动开发之2440/2410---uboot 移植
http://blog.chinaunix.net/uid-20620288-id-3058904.html
- hdu4921 Map
给最多10条链.每条链长度最大1000,链上每点有权值,每条链上按顺序,第i个点属于level[i]. 链上后一个点能够选的前提是前面的点都选了. 选择了一些点能够得到的分数是两部分加起来:1.所有点 ...
- Git使用之Permission Denied问题解决
今天碰到了Git的Permission Denied问题. 在安装好git之后,我们通常会配置username和邮箱 git config --global user.name "zengj ...
- java中方法中声明三个点“...”作用
public class Test { public static void main(String[] args) { String str[] = {"s"," ...
- IE8 下背景图标不显示
如图所示 : 微博微信前方各应有个图标,但是IE8下图标没有显示 css如下 .weibo_icon{background: url(../ieImages/weibo_icon.png)no-rep ...
- redis03----link 链表操作
link 链表结构 之前是操作字符串string 链表:头元素,后面一个一个的指向后面的元素.Redis内部实现了链表的结构.链表的头尾,从一个元素找到另外的元素. 链表的名字也是一个key. flu ...
- Android设备adb授权的原理【转】
本文转载自:http://blog.csdn.net/zahuopuboss/article/details/50831171 http://blog.csdn.net/sowhat_ah/artic ...
- YTU 2452: 麦克劳林用于函数求值
2452: 麦克劳林用于函数求值 时间限制: 1 Sec 内存限制: 128 MB 提交: 18 解决: 12 题目描述 泰勒公式是一个用函数在某点的信息描述其附近取值的公式.如果函数足够光滑的话 ...
- Couldn't connect to host, port: smtp.163.com, 25; timeout -1;
运行出现以下报错: Couldn't connect to host, port: smtp.163.com, 25; timeout -1; 也要设置端口 spring.mail.port=25