显然能重排为回文串相当于出现次数为奇数的字母不超过一个。考虑莫队,问题在于如何统计添加/删除一位的贡献。将各字母出现次数奇偶性看做二进制数,做一个前缀和一个后缀和。在右端添加一位时,更新区间的前缀、后缀集合,将后缀集合中合法的统计入答案即可。另三种更新类似。复杂度O(26*n√n)。

  但是这个毒瘤题他不仅卡常还卡空间。捣鼓了半天最后欢快地弃疗了。

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define ll long long
#define N 60010
char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
int gcd(int n,int m){return m==?n:gcd(m,n%m);}
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int n,m,block,a[N],pre[N],suf[N];
unsigned int ans[N];
unsigned short cntpre[<<],cntsuf[<<];
char s[N];
struct data
{
int k,l,r,i;
bool operator <(const data&a) const
{
return k<a.k||k==a.k&&(k&?r>a.r:r<a.r);
}
}q[N];
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4866.in","r",stdin);
freopen("bzoj4866.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
n=read(),m=read();block=*sqrt(n);
scanf("%s",s+);
for (int i=;i<=n;i++) a[i]=<<s[i]-'a';
for (int i=;i<=n;i++) pre[i]=pre[i-]^a[i];
for (int i=n;i>=;i--) suf[i]=suf[i+]^a[i];
for (int i=;i<=m;i++) q[i].l=read(),q[i].r=read(),q[i].k=q[i].l/block,q[i].i=i;
sort(q+,q+m+);
int l=,r=;
for (int i=;i<=m;i++)
{
ans[q[i].i]=ans[q[i-].i];
while (r<q[i].r)
{
++r,cntpre[pre[r-]]++,cntsuf[suf[r+]]++;
ans[q[i].i]+=cntpre[pre[r]];
for (int j=;j<;j++) ans[q[i].i]+=cntpre[pre[r]^(<<j)];
}
while (l>q[i].l)
{
--l,cntpre[pre[l-]]++,cntsuf[suf[l+]]++;
ans[q[i].i]+=cntsuf[suf[l]];
for (int j=;j<;j++) ans[q[i].i]+=cntsuf[suf[l]^(<<j)];
}
while (r>q[i].r)
{
ans[q[i].i]-=cntpre[pre[r]];
for (int j=;j<;j++) ans[q[i].i]-=cntpre[pre[r]^(<<j)];
cntpre[pre[r-]]--,cntsuf[suf[r+]]--,r--;
}
while (l<q[i].l)
{
ans[q[i].i]-=cntsuf[suf[l]];
for (int j=;j<;j++) ans[q[i].i]-=cntsuf[suf[l]^(<<j)];
cntpre[pre[l-]]--,cntsuf[suf[l+]]--,l++;
}
}
for (int i=;i<=m;i++) printf("%u\n",ans[i]);
return ;
}

BZOJ4866 Ynoi2017由乃的商场之旅(莫队)的更多相关文章

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

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

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

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

  3. 【BZOJ4810】[Ynoi2017]由乃的玉米田 bitset+莫队

    [BZOJ4810][Ynoi2017]由乃的玉米田 Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.由乃认为玉米田不美,所 ...

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

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

  5. bzoj 4866: [Ynoi2017]由乃的商场之旅

    设第i个字母的权值为1<<i,则一个可重集合可以重排为回文串,当且仅当这个集合的异或和x满足x==x&-x,用莫队维护区间内有多少对异或前缀和,异或后满足x==x&-x,这 ...

  6. BZOJ4810 Ynoi2017由乃的玉米田(莫队+bitset)

    多组询问不强制在线,那么考虑莫队.bitset维护当前区间出现了哪些数,数组记录每个数的出现次数以维护bitset.对于乘法,显然应有一个根号范围内的因子,暴力枚举即可.对于减法,a[i]-a[j]= ...

  7. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...

  8. 【BZOJ4810】[YNOI2017] 由乃的玉米田(莫队+bitset)

    点此看题面 大致题意: 给你一段序列,每次询问一段区间内是否存在两个数的差或和或积为\(x\). 莫队算法 看到区间询问+可以离线,首先想到了莫队啊. 但是,在较短的时间内更新信息依然比较难以实现. ...

  9. BZOJ 4810 [Ynoi2017]由乃的玉米田 ——Bitset 莫队算法

    加法和减法的操作都能想到Bitset. 然后发现乘法比较难办,反正复杂度已经是$O(n\log{n})$了 枚举因数也不能更差了,直接枚举就好了. #include <map> #incl ...

随机推荐

  1. Windows下的SysWow64和System32

    64位的Windows并不是简单地把所有东西都编译成64位就万事大吉的.关于64位的CPU应该做成什么样子,Intel和AMD曾有各自的打算.AMD的回答直接了当:新的64位处理器,应该能在提高更高处 ...

  2. Java: 数组、列表和集合的互相转换

    1. Array 转 List String[] city = {"Nanjing","Shanghai","Beijing"}; List ...

  3. 一文带你了解 Raft 一致性协议的关键点

    此文已由作者孙建良授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Raft 协议的发布,对分布式行业是一大福音,虽然在核心协议上基本都是师继 Paxos 祖师爷(lampor ...

  4. Wireshark对HTTPS数据的解密

    本文来自网易云社区 之前有介绍<wireshark抓包分析--TCP/IP协议>,然后某天有人问我,示例里是HTTP的,如果是HTTPS,你可以抓包分析吗?基于好奇,我查阅了下相关资料,把 ...

  5. thinkphp5使用workerman的定时器定时任务在某一个时间执行

    1.首先通过 composer 安装workerman,在thinkphp5完全开发手册的扩展->coposer包->workerman有详细说明: #在项目根目录执行以下指令compos ...

  6. Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04) -- 更新版

    作者:Antonio Leiva 时间:Aug 16, 2017 原文链接:https://antonioleiva.com/kotlin-android-extensions/ 在 Kotlin1. ...

  7. Zookeeper 分布式应用

    简介 这篇文章是旨在为那些想要利用zookeeper协调服务能力进行分布式应用创建的开发者的入门指导,包括一些理论性和实践性的内容. 文章的前四部分系统的介绍了zookeeper的相关概念,对于理解z ...

  8. 【Python+OpenCV】人脸识别基于环境Windows+Python3 version_3(Anaconda3)+OpenCV3.4.3安装配置最新版安装配置教程

    注:本次安装因为我要安装的是win10(64bit)python3.7与OpenCV3.4.3教程(当下最新版,记录下时间2018-11-17),实际中这个教程的方法对于win10,32位又或是64位 ...

  9. 关于html2canvas清晰度

    最近有个小项目 需要生成海报让用户去分享~~~vue做的,海报通过html2canvas 生成. 遇到的最大问题是生成图片的清晰度~~网上找了好多方法. 放大倍数!~网上找的~~ var cntEle ...

  10. [SHELL]退出脚本

    一,退出状态码 1,范围:0~255 2,查看退出状态码:必须在命令执行之后立即执行 ,显示的是脚本最后一条命令的退出状态码 echo $? 若f返回值为0,则表示正常 有异常为正值 二,exit 脚 ...