设第i个字母的权值为1<<i,则一个可重集合可以重排为回文串,当且仅当这个集合的异或和x满足x==x&-x,用莫队维护区间内有多少对异或前缀和,异或后满足x==x&-x,这样端点移动的代价为字符集大小+1=27,因此时间复杂度为$O(27n\sqrt{m})$

#include<cstdio>
#include<cmath>
#include<algorithm>
char buf[],*ptr=buf-;
int _(){
int x=,c=*++ptr;
while(c<)c=*++ptr;
while(c>)x=x*+c-,c=*++ptr;
return x;
}
typedef unsigned int u32;
const int P=,N=;
int n,q,xs[N][];
int hx[P][],idp=;
int getid(int x){
int w=x%P;
while(hx[w][]){
if(hx[w][]==x)return hx[w][];
if((w+=)>=P)w-=P;
}
hx[w][]=x;
return hx[w][]=++idp;
}
u32 as[N],pos[N],B,ans=,t[N*];
struct Q{
int l,r,id;
}qs[N];
bool operator<(Q a,Q b){
if(pos[a.l]!=pos[b.l])return pos[a.l]<pos[b.l];
if(a.r!=b.r)return (a.r<b.r)^(pos[a.l]&);
return a.id<b.id;
}
void ins(int*x){
for(int i=;i<=;++i)ans+=t[x[i]];
++t[x[]];
}
void del(int*x){
--t[x[]];
for(int i=;i<=;++i)ans-=t[x[i]];
}
int main(){
fread(buf,,sizeof(buf),stdin)[buf]=;
n=_();q=_();
B=(n+)/sqrt(q+)+;
for(int i=;i<=n;++i)pos[i]=i/B;
while(*ptr<'a')++ptr;
for(int i=;i<=n;++i)xs[i][]=xs[i-][]^<<*ptr++-'a';
for(int i=;i<=n;++i){
for(int j=;j<;++j)xs[i][j]=xs[i][]^<<j;
}
for(int i=;i<=n;++i){
for(int j=;j<=;++j)xs[i][j]=getid(xs[i][j]);
}
for(int i=;i<q;++i){
qs[i].l=_()-;
qs[i].r=_();
qs[i].id=i;
}
std::sort(qs,qs+q);
int L=,R=;
for(int i=;i<q;++i){
int l=qs[i].l,r=qs[i].r;
while(L>l)ins(xs[--L]);
while(R<r)ins(xs[++R]);
while(L<l)del(xs[L++]);
while(R>r)del(xs[R--]);
as[qs[i].id]=ans;
}
for(int i=;i<q;++i)printf("%u\n",as[i]);
return ;
}

bzoj 4866: [Ynoi2017]由乃的商场之旅的更多相关文章

  1. [bzoj4866] [Ynoi2017]由乃的商场之旅

    来自FallDream的博客,未经允许,请勿转载,谢谢, 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你一样,觉得这游戏很无聊,于是决定换一个商场 ...

  2. 【莫队】bzoj4866: [Ynoi2017]由乃的商场之旅

    莫队的一些套路 Description 由乃有一天去参加一个商场举办的游戏.商场派了一些球王排成一行.每个人面前有几堆球.说来也巧,由乃和你 一样,觉得这游戏很无聊,于是决定换一个商场.另一个商场是D ...

  3. BZOJ.3598.[SCOI2014]方伯伯的商场之旅(贪心 数位DP)

    题目链接 先考虑,对于确定的一个数,怎样移动代价最少(或者移到哪个位置最优)? 假设我们都移到下标\(1\)位置(设集合点为\(1\)),那么移动到下标\(2\)与\(1\)相比代价差为:\(下标&l ...

  4. BZOJ4866 Ynoi2017由乃的商场之旅(莫队)

    显然能重排为回文串相当于出现次数为奇数的字母不超过一个.考虑莫队,问题在于如何统计添加/删除一位的贡献.将各字母出现次数奇偶性看做二进制数,做一个前缀和一个后缀和.在右端添加一位时,更新区间的前缀.后 ...

  5. 【BZOJ4866】[YNOI2017] 由乃的商场之旅(莫队)

    点此看题面 大致题意: 给你一个字符串,每次给你一段区间,问这段区间内有多少个字符串在重新排列后可以变成一个回文串. 关于莫队 详见这篇博客:莫队算法学习笔记(一)--普通莫队. 关于回文 要使一个字 ...

  6. bzoj 3598: [Scoi2014]方伯伯的商场之旅【数位dp】

    参考了这个http://www.cnblogs.com/Artanis/p/3751644.html,好像比一般方法好写 大概思想就是先计算出把所有石子都合并到1位置的代价,这样显然有一些是不优的,然 ...

  7. bzoj 3598 [Scoi2014]方伯伯的商场之旅——数位dp

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3598 TJ:https://www.cnblogs.com/Zinn/p/9351218.h ...

  8. 「SCOI2014」方伯伯的商场之旅 解题报告

    「SCOI2014」方伯伯的商场之旅 我一开始的想法会被两个相同的集合位置去重给搞死,不过应该还是可以写的,讨论起来老麻烦. 可以先钦定在\(1\)号点集合,然后往后调整一部分. 具体一点,通过前缀和 ...

  9. 「SCOI2014」方伯伯的商场之旅

    「SCOI2014」方伯伯的商场之旅 题目描述 方伯伯有一天去参加一个商场举办的游戏.商场派了一些工作人员排成一行.每个人面前有几堆石子.说来也巧,位置在 \(i\) 的人面前的第 \(j\) 堆的石 ...

随机推荐

  1. php 函数集锦

    1.array_intersect_assoc()用于比较两个(或更多个)数组的键名和键值,并返回交集. <?php $a1=array("a"=>"red& ...

  2. C++学习(二十三)(C语言部分)之 指针4

    指针 指针 存放地址 只能存放地址 使用 &取地址运算符 *取值 解引用运算符 malloc 申请堆内存 free释放堆内存 1.1 指针 存放的地址(变量地址 常量区的地址 堆区内存首地址 ...

  3. 《DSP using MATLAB》Problem 6.7

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  4. Redis 5.0.0 releases notes

    Redis 5.0 release notes ======================= ---------------------------------------------------- ...

  5. IO流的序列化和反序列化

    序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...

  6. Percona Toolkit之pt-table-checksum学习

    pt-table-checksum用来检测主从数据库上的数据一致性,其原理是通过在主库上运行一系列的MySQL函数计算每个表的散列值,并利用主从关系将相同的操作在从服务器上重放(基于statement ...

  7. OutputStream 和 Writer

    OutputStream类(直接操作byte数组) 该类是字节输出流的抽象类,定义了输出流的各种操作方法.如下图是OutputStream的层次结构: ByteArrayOutputStream:字节 ...

  8. activemq jms使用

    activemq 是 基于 jms 协议的 消息队列 消息 流程: jsm 的 消息流程鼻尖简单  生产者发送消息到目的地,消费者 监听这个目的地,然后收到消息. 相比 amqp 的 消息流程简单很多 ...

  9. ES查询之刨根问底

    昨天有一个需求,就是想要根据某个网关url做过滤,获取其下面所有的上下文nginx日志:如果直接"query":"https://XXX/YYY/ZZZ"发现有 ...

  10. Jmeter--报错 WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5.

    今天要用Jmeter测试服务器性能,发现GUI界面总是有warning提示: WARNING: Could not open/create prefs root node Software\JavaS ...