真·美好的每一天(美好个鬼啊)

真·调了一下午

原因是,我之前移动指针时没有先扩再缩,所以导致区间是负的;但是正常来说也没事,可是这题卡常,桶我开的是 unsigned short ,于是区间是负的,自然桶中会有负数,负数爆成正的爽(雾)。

显然一段区间是回文的当且仅当至多有一个字母出现奇数次,于是我们尝试用异或去解这道题。

我们还是类似前缀异或的思路来取出区间异或值,并枚举多出来的字母是哪个即可(这样会T)。

于是我们可以在最开始预处理出有用的状态,就是满足 \(a[i] \bigoplus (1<<i)\) 是存在的状态存起来即可。(其实跑满好像是一样的)

比较暴力的写法。
inline void add(int x) {
anss+=c[a[x]]++;
for(R i=0;i<L;++i)
anss+=c[a[x]^(1<<i)];
}
inline void sub(int x) {
anss-=--c[a[x]];
for(R i=0;i<L;++i)
anss-=c[a[x]^(1<<i)];
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<bitset>
#define R register int
using namespace std;
namespace Luitaryi {
inline int g() { R x=0,f=1;
register char s; while(!isdigit(s=getchar())) f=s=='-'?-1:f;
do x=x*10+(s^48); while(isdigit(s=getchar())); return x*f;
} const int N=60001,M=(1<<26)+1,L=26;
#define u16 unsigned short
struct node { int l,r,id,pos;
inline bool operator < (const node& that) const
{return pos==that.pos?pos&1?r<that.r:r>that.r:l<that.l;}
}q[N];
int n,m,B,a[N];
int anss,ans[N],d[N][L];
bitset<M> tg;
char s[N],cnt[N]; u16 c[M];
inline void add(int x) {
anss+=c[a[x]]++;
for(R i=0;i<cnt[x];++i)
anss+=c[d[x][i]];
}
inline void sub(int x) {
anss-=--c[a[x]];
for(R i=0;i<cnt[x];++i)
anss-=c[d[x][i]];
}
inline void main() {
n=g(),m=g(),scanf("%s",s+1);
B=sqrt(n+1); tg[0]=1;
for(R i=1;i<=n;++i) tg[(a[i]=a[i-1]^(1<<(s[i]-'a')))]=1;
for(R i=0;i<=n;++i) for(R j=0,t=1;j<L;++j,t<<=1)
if(tg[a[i]^t]) d[i][cnt[i]++]=a[i]^t;
for(R i=1;i<=m;++i)
q[i].l=g()-1,q[i].r=g(),q[i].id=i,
q[i].pos=q[i].l/B;
sort(q+1,q+m+1);
for(R i=1,l=1,r=0;i<=m;++i) {
while(l>q[i].l) add(--l); while(r<q[i].r) add(++r);
while(l<q[i].l) sub(l++); while(r>q[i].r) sub(r--);
ans[q[i].id]=anss;
}
for(R i=1;i<=m;++i) printf("%d\n",ans[i]);
}
} signed main() {Luitaryi::main(); return 0;}

2019.11.25

P3604 美好的每一天的更多相关文章

  1. B 洛谷 P3604 美好的每一天 [莫队算法]

    题目背景 时间限制3s,空间限制162MB 素晴らしき日々 我们的情人,不过是随便借个名字,用幻想吹出来的肥皂泡,把信拿去吧,你可以使假戏成真.我本来是无病呻吟,漫无目的的吐露爱情---现在这些漂泊不 ...

  2. 洛谷P3604 美好的每一天(莫队)

    传送门 由乃的题还是一如既往的可怕…… 先放上原题解 标解: 一个区间可以重排成为回文串,即区间中最多有一个字母出现奇数次,其他的都出现偶数次 发现这个和  类似 这样如果一个区间的  和为  或者  ...

  3. luogu P3604 美好的每一天(莫队+二进制)

    这个题还是可以的. 但是卡常卡得我心力憔悴.还是太菜了 我们把一个区间当做一个26位二进制数,每一位代表一个英文,二进制数的每一个位0代表这一位对应的字母出现了偶数次,否则出现了奇数次. 那么一个区间 ...

  4. 2021record

    2021-10-14 P2577 [ZJOI2004]午餐 2021-10-13 CF815C Karen and Supermarket(小小紫题,可笑可笑) P6748 『MdOI R3』Fall ...

  5. 对于前端,「微信小程序」其实不美好

    微信小程序开放公测了,9月底我曾经写过一篇 「微信小程序」来了,其中最后一句:"谢天谢地,我居然还是个前端". 这种火爆的新事物总是令人激动,感谢这个时代. 但是,当我真作为开发者 ...

  6. 微小,但是美好的改变 G2 2.2发布

    G2 2.2.0, 『微小,但是美好的改变.』 # 一.丰富可视化交互形式 #### 选择: [图形的单选.多选](https://g2.alipay.com/tutorial/geom-select ...

  7. NuGet 让你都美好的PM

    题外话 从前有座山,山上有座庙,庙里有个老和尚.阿阿阿,好多鱼好多余. 什么是Nuget NuGet(发音:New-Get)是一个Visual Studio的扩展.在使用Visual Studio开发 ...

  8. 设计师Yoyo:为用户设计产品,让他们生活更美好

    Yoyo设计走过的路:纽约爱立信,西雅图美国在线,硅谷雅虎,ATT,深圳腾讯,华为:Yoyo不仅是顶级的交互体验设计师,还是很Open的知识分享者,从职业选择,以及对年轻人的建议几个角度,摘录他的文章 ...

  9. Django学习(4)表单,让数据库更美好

    表单,在HTML中的标签为<form></form>,在网页中主要负责数据采集功能.我们在浏览网站时,常常会碰到注册账号.账号登录等,这就是表单的典型应用. 在Django学习 ...

随机推荐

  1. while 语句的逻辑

    # i =3# username = '大天天'# password = 123# while i > 0:# name = input('请输入你的名字:')# i -= 1# if name ...

  2. 【LEETCODE】51、数组分类,简单级别,题目:581,830,1010,665

    package y2019.Algorithm.array; /** * @ClassName FindUnsortedSubarray * @Description TODO 581. Shorte ...

  3. new Image 读取宽高为0——onload

    获取图片一张图片的大小 let img = new Image() img.src = imgUrl if ( img.width != 375 || img.height != 200 ) { me ...

  4. Linux中shell字符串分隔、字符串替换、字符串拼接

    1.从properties文件中读取变量 SERVER_NAME=`sed '/project.config/!d;s/.*=//' conf/dubbo.properties | tr -d '\r ...

  5. ActiveMQ Queue vs Topic vs VirtualTopic

    之前写过一篇文章讨论VirtualTopic,但觉得不够透彻,这里再根据实验结果进行一次横向对比破除模糊和选择困难症. 文章中核心对比要素是:消息副本和负载均衡 Queue的特点和优势 ActiveM ...

  6. MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK(转)

    1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的 数据库链接(DBLINK). 要允许这个存储引擎, 当 ...

  7. vue-cli3.0 脚手架搭建项目的过程详解

    1.安装vue-cli 3.0 ? 1 2 3 npm install -g @vue/cli # or yarn global add @vue/cli 安装成功后查看版本:vue -V(大写的V) ...

  8. 每个程序员都应该知道延迟数—Latency Numbers Every Programmer Should Know

    每个程序员都应该知道延迟数 Latency Numbers Every Programmer Should Know https://people.eecs.berkeley.edu/~rcs/res ...

  9. linux 下安装node 并使用nginx做域名绑定

    #1 ,home目录下 下载nodejs安装包,解压 并修改文件夹名称 wget https://nodejs.org/dist/v8.11.4/node-v8.11.4-linux-x64.tar. ...

  10. 渗透之路基础 -- XXE注入漏洞

    XXE漏洞 XXE漏洞全称XML External Entity Injection即xml外部实体注入漏洞,XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件, ...