分块大暴力,跟区间众数基本一样

 #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 作诗的更多相关文章

  1. 洛谷P4135 作诗 (分块)

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

  2. 洛谷 P4135 作诗 题解

    题面. 之前做过一道很类似的题目 洛谷P4168蒲公英 ,然后看到这题很快就想到了解法,做完这题可以对比一下,真的很像. 题目要求区间内出现次数为正偶数的数字的数量. 数据范围1e5,可以分块. 我们 ...

  3. 洛谷P4135 作诗

    题意:[l,r]之间有多少个数出现了正偶数次.强制在线. 解:第一眼想到莫队,然后发现强制在线...分块吧. 有个很朴素的想法就是蒲公英那题的套路,做每块前缀和的桶. 然后发现这题空间128M,数组大 ...

  4. 洛谷 P4135 作诗(分块)

    题目链接 题意:\(n\) 个数,每个数都在 \([1,c]\) 中,\(m\) 次询问,每次问在 \([l,r]\) 中有多少个数出现偶数次.强制在线. \(1 \leq n,m,c \leq 10 ...

  5. 洛谷P4135 作诗(不一样的分块)

    题面 给定一个长度为 n n n 的整数序列 A A A ,序列中每个数在 [ 1 , c ] [1,c] [1,c] 范围内.有 m m m 次询问,每次询问查询一个区间 [ l , r ] [l, ...

  6. 洛谷P4135 Ynoi2016 掉进兔子洞 (带权bitset?/bitset优化莫队 模板) 题解

    题面. 看到这道题,我第一反应就是莫队. 我甚至也猜出了把所有询问的三个区间压到一起处理然后分别计算对应询问答案. 但是,这么复杂的贡献用什么东西存?难道要开一个数组 query_appear_tim ...

  7. P4135 作诗——分块

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

  8. luogu P4135 作诗

    嘟嘟嘟 郑重声明:我的前几到分块题写法上都有点小毛病,以这篇为主! 这道题感觉也是分块的基本套路,只不过卡常,得开氧气. 维护俩:sum[i][j]表示前 i 块中,数字 j 出现了多少次,ans[i ...

  9. P4135 作诗

    传送门 分块 设sum[ i ] [ j ] 存从左边到第 i 块时,数字 j 的出现次数 f [ i ] [ j ] 存从第 i 块,到第 j 块的一整段的答案 那么最后答案就是一段区间中几块整段的 ...

随机推荐

  1. Redis+EJB实现缓存(一)

        上篇博客大概的对Redis做了一个主要的了解.由于刚刚接触自己也不太明确.所以上篇博客写的乱七八糟的.这篇由于项目须要,学习了一下Redis和EJB集成. 如今脑子相对照较清晰了一些. 实现思 ...

  2. 浅谈C#中常见的委托

    一提到委托,浮现在我们脑海中的大概是听的最多的就是类似C++的函数指针吧,呵呵,至少我的第一个反应是这样的. 关于委托的定义和使用,已经有诸多的人讲解过,并且讲解细致入微,尤其是张子阳的那一篇.我就不 ...

  3. CString转换成char *字符串问题

    buf = (LPSTR)(LPCTSTR)str;      ==>     buf 显示的是第一个字符 strcpy(pNumber,strNumber);      ==>    e ...

  4. FZUOJ Problem 2200 cleaning DP

    Problem 2200 cleaning  Problem Description N个人围成一圈在讨论大扫除的事情,需要选出K个人.但是每个人与他距离为2的人存在矛盾,所以这K个人中任意两个人的距 ...

  5. Jetty的JNDI数据源

    一. 此处绑定的数据源是以 DBCP 为实现.首先必须将数据库驱动(这里用了MYSQL数据库)和DBCP所需要的 Jar 包复制到 Jetty 根目录的 lib 目录下.DBCP主要需要以下3个文件: ...

  6. NIO原理图

  7. openfire学习(一)

    需要开发一款软件,其中的即时通讯功能使用xmpp协议来做,服务端用openfire. openfire的下载和配置就不多说,可能大多数人第一次用会遇到登陆不了的问题,我也遇到了,事实上登陆错误是因为用 ...

  8. PHP——巧用PHP函数array_merge()合并数组

    前言 返回联系人列表,包含所有的字母,之前返回的是存在这个联系人才会返回对应的大写字母,后面更改了要求要返回所有的字母从A-Z.PHP内置的一些函数活用起来,真的很省劲! 步骤 一般这时候大家可能直接 ...

  9. 一步一步学Silverlight 2系列(7):全屏模式支持

    一步一步学Silverlight 2系列(7):全屏模式支持   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言V ...

  10. Android的三种主流资源尺寸

    Android三种主流资源屏幕尺寸:QVGA.HVGA.WVGA VGA的分辨率是640x480像素 QVGA(Quarter VGA)就是320x240,即VGA分辨率的1/4 HVGA(Half ...