luogu4135 作诗
看这里
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int n, c, m, a[100005], bel[100005], blc, f[325][325], sum[325][100005], cnt[100005];
int uu, vv, ans;
int query(int uu, int vv){
int re=0;
if(bel[uu]==bel[vv]){
for(int i=uu; i<=vv; i++) cnt[a[i]] = 0;
for(int i=uu; i<=vv; i++){
cnt[a[i]]++;
if(!(cnt[a[i]]&1)) re++;
else if(cnt[a[i]]>2) re--;
}
}
else{
re = f[bel[uu]+1][bel[vv]-1];
for(int i=uu; i<=bel[uu]*blc; i++)
cnt[a[i]] = sum[bel[vv]-1][a[i]] - sum[bel[uu]][a[i]];
for(int i=(bel[vv]-1)*blc+1; i<=vv; i++)
cnt[a[i]] = sum[bel[vv]-1][a[i]] - sum[bel[uu]][a[i]];
for(int i=uu; i<=bel[uu]*blc; i++){
cnt[a[i]]++;
if(!(cnt[a[i]]&1)) re++;
else if(cnt[a[i]]>2) re--;
}
for(int i=(bel[vv]-1)*blc+1; i<=vv; i++){
cnt[a[i]]++;
if(!(cnt[a[i]]&1)) re++;
else if(cnt[a[i]]>2) re--;
}
}
return re;
}
int main(){
cin>>n>>c>>m;
blc = sqrt(n);
for(int i=1; i<=n; i++){
scanf("%d", &a[i]);
bel[i] = (i - 1) / blc + 1;
}
for(int i=1; i<=n; i++){
if(i==(bel[i]-1)*blc+1){
for(int j=1; j<=c; j++)
sum[bel[i]][j] = sum[bel[i]-1][j];
}
sum[bel[i]][a[i]]++;
}
for(int i=1; i<=bel[n]; i++){
memset(cnt, 0, sizeof(cnt));
int now=0;
for(int j=(i-1)*blc+1; j<=n; j++){
cnt[a[j]]++;
if(!(cnt[a[j]]&1)) now++;
else if(cnt[a[j]]>2) now--;
f[i][bel[j]] = now;
}
}
while(m--){
scanf("%d %d", &uu, &vv);
uu = (uu + ans) % n + 1;
vv = (vv + ans) % n + 1;
if(uu>vv) swap(uu, vv);
ans = query(uu, vv);
printf("%d\n", ans);
}
return 0;
}
luogu4135 作诗的更多相关文章
- [BZOJ2821][Luogu4135] 作诗
由于BZOJ这题要contact lydsy2012@163.com,所以就放个洛谷的传送门(我木有BZOJ权限号啊0.0) 诶?这不是莫队裸题?? 等等--这题强制在线欸,没办法莫队了,肿么破? 之 ...
- 「luogu4135」作诗
「luogu4135」作诗 传送门 分块好题. 预处理出 \(f[i][j]\) 表示 \(i\) 号块到 \(j\) 号块的答案,\(num[i][k]\) 表示 \(k\) 在前 \(i\) 块的 ...
- 【BZOJ2821】作诗(Poetize) 分块
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M次, ...
- 2821: 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 1078 Solved: 348[Submit][Status] ...
- 做10年Windows程序员与做10年Linux程序员的区别(附无数评论)(开源软件相当于熟读唐诗三百首,不会作诗也会吟)
如果一个程序员从来没有在linux,unix下开发过程序,一直在windows下面开发程序, 同样是工作10年, 大部分情况下与在linux,unix下面开发10年的程序员水平会差别很大.我写这篇文章 ...
- 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 ...
- 【分块】BZOJ2821 作诗(Poetize)
2821: 作诗(Poetize) Time Limit: 50 Sec Memory Limit: 128 MBSubmit: 3265 Solved: 951[Submit][Status][ ...
- [Luogu 4135] 作诗
Description 神犇SJY虐完HEOI之后给傻×LYD出了一题: SHY是T国的公主,平时的一大爱好是作诗. 由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY找来一篇长度为N的文章,阅读M ...
- CH4907 作诗
题意 4907 作诗 0x49「数据结构进阶」练习 描述 神犇SJY虐完HEOI之后给傻×LYD出了一题:SHY是T国的公主,平时的一大爱好是作诗.由于时间紧迫,SHY作完诗之后还要虐OI,于是SHY ...
随机推荐
- POJ1961(kmp中Next数组的性质)
对于某个位置i,i - Next[i]是循环节长度,i整除(i - Next[i])时是完整的几个循环元. ; int n, kase, Next[maxn]; char ch[maxn]; inli ...
- [WOJ1138]最大子序和
题目链接: WOJ1138 题目分析: 是很经典的一道题,乱搞的方法应该有不少,这里介绍O(n)的单调队列做法 首先维护一个前缀和,然后枚举每一个位置,维护一个前缀和单增的单调队列,但队列仅储存下标, ...
- 复习Java和前端、后端框架等。
以下便是我开始复习时做的笔记.
- 138 Copy List with Random Pointer 复制带随机指针的链表
给出一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点.返回一个深拷贝的链表. 详见:https://leetcode.com/problems/copy-list- ...
- AJPFX简述abstract class和interface的区别
含有abstract修饰符的class即为抽象类,abstract类不能创建的实例对象.含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是 ...
- VS2013编译libjpeg库
第一步:找到刚刚解压出来的“jpeg-9a”文件夹下面的“makefile.vc”文件,用记事本或Notepad++等编辑工具打开,然后找到里面的“!include <win32.mak> ...
- 新建cordova应用
使用命令行(本例命令行均使用as或webstrom的命令行),在任意目录输入以下命令新建cordova应用 cordova create capp1 com.cesc.ewater.capp1 其中c ...
- Hibernate懒加载深入分析
Hibernate懒加载深入分析 懒加载可以提高性能吗? 不可以简单的说"能",因为Hibernate的关系映射拖累了SQL的性能,所以想出懒加载来弥补.只是弥补而以,不会超越. ...
- java (给出年月日,计算该日是该年的第n天 )
package com.ywx.testdemo01; import java.util.Scanner; /** * 题目:给出年月日,计算该日是该年的第n天 * @author yangwenxu ...
- OCP 11g 第二章练习
练习 2-1 在Windows计算机上安装SQL Developer 在本练习中,将在Windows计算机上安装SQL Developer 1. 从以下URL下载当前SQL Developer版本: ...