CSP 前学习珂学,祝自己 \(while(1)\ rp++\)。


考虑求解出每种数对答案的贡献。

设 \(t=r-l+1,k_x=\sum\limits_{i=l}^r [a_i=x]\),由容斥得贡献为 \(x(2^t-2^{t-k_x})\)。

求解 \(k_x\),考虑莫队,时间复杂度为 \(O(n\sqrt n)\),这也是本题的复杂度上限。

由于 \(p\) 会变,所以不能用莫对维护 \(2^i\)。我们希望答案的计算次数级别为 \(O(\sqrt n)\),考虑根号分治:

  • 对于出现次数 \(\le \sqrt n\) 的数,我们用数组 \(num_i\) 统计,表示当前子串出现次数为 \(i\) 的数之和为多少。可以表示为: \(num_i=\sum\limits_{j=1}^{10^5}[k_j=i]\times j\),时间复杂度 \(O(\sqrt n)\)。

  • 对于出现次数 \(>\sqrt n\) 的数,我们直接维护它们的 \(k_i\)。由于这种数的个数级别为 \(O(\sqrt n)\),所以也没问题。

现在只需要考虑快速幂的问题。普通快速幂肯定是不行了,时间复杂度会多一只 \(\log\)。考虑预处理可以给到 \(O(\sqrt n)\),选择光速幂。

时间复杂度 \(O(\sqrt n)\)。

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m,kl,a[N],l=1,r,ans[N];
struct que{int l,r,p,id;}q[N];
int cmp(que x,que y){
if(x.l/kl!=y.l/kl)
return x.l/kl<y.l/kl;
if(x.l/kl%2) return x.r>y.r;
return x.r<y.r;
}int pw1[N],pw2[N],p;
void init(int c){
p=c,pw1[0]=pw2[0]=1;
for(int i=1;i<=kl;i++)
pw1[i]=pw1[i-1]*2%p;
for(int i=1;i<=kl;i++)
pw2[i]=pw2[i-1]*pw1[kl]%p;
}int kpow(int y){
return pw1[y%kl]*pw2[y/kl]%p;
}int num[N],sum[N],vis[N],b[N],id;
void add(int x){
sum[x]++;
if(vis[x]) return;
num[sum[x]-1]-=x;
num[sum[x]]+=x;
}void del(int x){
sum[x]--;
if(vis[x]) return;
num[sum[x]+1]-=x;
num[sum[x]]+=x;
}signed main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m,kl=sqrt(n)+1;
for(int i=1;i<=n;i++)
cin>>a[i],num[a[i]]++;
for(int i=1;i<=1e5;i++){
if(num[i]>kl)
b[++id]=i,vis[i]=1;
num[i]=0;
}for(int i=1;i<=m;i++)
cin>>q[i].l>>q[i].r>>q[i].p,q[i].id=i;
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;i++){
init(q[i].p);int ij=q[i].id;
while(r<q[i].r) add(a[++r]);
while(r>q[i].r) del(a[r--]);
while(l>q[i].l) add(a[--l]);
while(l<q[i].l) del(a[l++]);
for(int j=1;j<=id;j++)
ans[ij]=(ans[ij]+b[j]*(kpow(r-l+1)-kpow(r-l+1-sum[b[j]])))%p;
for(int j=1;j<=kl;j++)
ans[ij]=(ans[ij]+num[j]*(kpow(r-l+1)-kpow(r-l+1-j)))%p;
ans[ij]=(ans[ij]+p)%p;
}for(int i=1;i<=m;i++)
cout<<ans[i]<<"\n";
return 0;
}

[Ynoi2015] 盼君勿忘 题解的更多相关文章

  1. 题解 P5072 【[Ynoi2015] 盼君勿忘】

    在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后,不归之人与望眼欲穿的众人, 人人本着正义之名,长存不灭的过去.逐渐消逝的未来.我回来了,纵使日薄西山,即便看不到未来,此时此刻的光辉,盼君勿忘 ...

  2. [Ynoi2015]盼君勿忘

    题目大意: 给定一个序列,每次查询一个区间\([l,r]\)中所有子序列分别去重后的和\(\bmod p\)(每次询问模数不同). 解题思路: 在太阳西斜的这个世界里,置身天上之森.等这场战争结束之后 ...

  3. 【题解】Luogu P5072 [Ynoi2015]盼君勿忘

    众所周知lxl是个毒瘤,Ynoi道道都是神仙题,题面好评 原题传送门 一看这题没有修改操作就知道这是莫队题 我博客里对莫队的简单介绍 既然是莫队,我们就要考虑每多一个数或少一个数对答案的贡献是什么 假 ...

  4. Luogu P5072 [Ynoi2015]盼君勿忘

    题意 给定一个长度为 \(n\) 的序列 \(a\) 和 \(m\) 次询问,第 \(i\) 次询问需要求出 \([l_i,r_i]\) 内所有子序列去重之后的和,对 \(p_i\) 取模. \(\t ...

  5. 洛谷P5072 [Ynoi2015]盼君勿忘 [莫队]

    传送门 辣鸡卡常题目浪费我一下午-- 思路 显然是一道莫队. 假设区间长度为\(len\),\(x\)的出现次数为\(k\),那么\(x\)的贡献就是\(x(2^{len-k}(2^k-1))\),即 ...

  6. P5072 [Ynoi2015]盼君勿忘

    传送门 一开始理解错题意了--还以为是两个子序列相同的话只算一次--结果是子序列里相同的元素只算一次-- 对于一个区间\([l,r]\),设其中\(x\)出现了\(k\)次,那么它的贡献就是它的权值乘 ...

  7. 洛谷:P5072 [Ynoi2015]盼君勿忘

    原题地址:https://www.luogu.org/problem/P5072 题目简述 给定一个序列,每次查询一个区间[l,r]中所有子序列分别去重后的和mod p 思路 我们考虑每个数的贡献.即 ...

  8. 【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)

    点此看题面 大致题意: 一个序列,每次询问一个区间\([l,r]\)并给出一个模数\(p\),求模\(p\)意义下区间\([l,r]\)内所有子序列去重后值的和. 题意转化 原来的题意看起来似乎很棘手 ...

  9. Luogu5072 [Ynoi2015]盼君勿忘 【莫队】

    题目描述:对于一个长度为\(n\)的序列,\(m\)次询问\(l,r,p\),计算\([l,r]\)的所有子序列的不同数之和\(\mathrm{mod} \ p\). 数据范围:\(n,m,a_i\l ...

  10. EC笔记:第二部分:12、复制对象时勿忘其每一个成分

    EC笔记:第二部分:12.复制对象时勿忘其每一个成分 1.场景 某些时候,我们不想使用编译器提供的默认拷贝函数(包括拷贝构造函数和赋值运算符),考虑以下类定义: 代码1: class Point{ p ...

随机推荐

  1. Excel VLOOKUP 函数入门教程

    一.引言 在日常工作中,Excel 是处理数据的强大工具之一,而 VLOOKUP 函数作为 Excel 中最常用的查找函数之一,能够帮助用户在表格或数值数组中快速定位并返回所需的数据.它的工作原理是在 ...

  2. Doc for DevNow

    前言 DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论.搜索等功能,欢迎大家体验. 首先庆祝下 DevNow star 在不久前过百,对我来说还是蛮有成就感的,感 ...

  3. Spring RestTemplete支持Https安全请求

    实现步骤 Step1: 自定义ClientHttpRequestFactory package com.example.demo.https; import org.springframework.h ...

  4. springboot搭建http2服务器和h2c服务器 h2 的http/https 请求服务器

    HTTP2.0特性通俗易懂篇:https://www.cnblogs.com/yingsmirk/p/5248506.html深入了解篇:https://www.jianshu.com/p/67c54 ...

  5. .NET Core 类型系统(Types System)底层原理浅谈

    C#类型系统 C# 是一种强类型语言. 每个变量和常量都有一个类型,每个求值的表达式也是如此. 每个方法声明都为每个输入参数和返回值指定名称.类型和种类(值.引用或输出). .NET 类库定义了内置数 ...

  6. AutoCAD 2020中文版建筑设计从入门到精通下载链接

    AutoCAD 2020中文版建筑设计从入门到精通下载链接 链接:https://pan.baidu.com/s/1EgFHOSKfPrr9Xdp3bNA-pA或https://pan.baidu.c ...

  7. 张正友的相机标定论文Flexible camera calibration by viewing a plane from unknown orientations的翻译

    张正友的相机标定论文Flexible camera calibration by viewing a plane from unknown orientations的翻译: 翻译的pdf版本为:htt ...

  8. 肖健雄(Jianxiong Xiao)的开源SFM代码SFMedu的运行方法

    注意:本文是针对肖健雄(Jianxiong Xiao)博士的的开源SFM代码SFMedu(https://github.com/jianxiongxiao/SFMedu)的运行方法. 本人的运行环境: ...

  9. [转]export ‘default‘ (imported as ‘Vue‘) was not found in ‘vue

    问题原因:我是安装了最新的vuecli,版本大概是4.5.4,我最开始安装vuecli没有指定版本下面是我出问题的代码,其实就是自己不会用vuecli4. npm install -g @vue/cl ...

  10. asp.net core Theme 中间件

    asp.net core中自定义视图引擎,继承接口 IViewLocationExpander public class ThemeViewLocationExpander : IViewLocati ...