B3645 数列前缀和 20

news/2024/10/18 5:56:02/

题目描述

给定一个长度为 n 的数列 a,请回答 q 次询问,每次给定 l,r,请求出  (\prod_{r}^{i=l}a[i])​mod  p 的值,其中 p=1,145,141。

输入格式

第一行是两个整数,依次表示数列长度 n 和询问次数 q。
第二行有 n 个整数,第 i 个整数表示 ai​。
接下来 q 行,每行两个整数 l,r,表示一次询问。

输出格式

为了避免大量数据输出导致超时,请输出一行一个整数表示所有询问的答案的按位异或和。

输入输出样例

输入 #1复制

5 3
1 2 3 4 5
2 3
3 4
2 4

输出 #1复制

18

说明/提示

样例 1 解释

三次询问的答案依次为 6,12,24,按位异或和为 18。

数据规模与约定

  • 对于 30% 的数据,保证 n,q≤10^3。
  • 对于60% 的数据,保证 n,q≤10^5。

对于全部的测试点,保证 1≤n,q≤10^6,1≤l≤r≤n,1≤ai​<p。

提示

你可以在这里学习如何线性求逆元,请尽可能做到 O(1) 回答单次询问。

本题先求到n的前缀积,然后维护l-1的前缀积,r+1的后缀积,对l-1的前缀积,r+1的后求逆,

最后相乘再取模,欧克

#include<bits/stdc++.h>
using namespace std;
//#pragma GCC optimize(2)
#define  endl '\n'
#define lowbit(x) ((x)&-(x))
#define pi 3.1415926535
const int mod=1145141;
typedef long long ll;
ll ans=0,n1,m1;
ll t=0,s1=0,s2=0,s3=0,s4=0,max1=0,max2=0,w,min1=100000000,sum=0,n,m,i,j,k,v,l,r;inline int read() {bool sym=0;int res=0;char ch=getchar();while(!isdigit(ch))sym |=(ch =='-'),ch=getchar();while(isdigit(ch)) res =(res<<3)+(res<<1)+(ch^48),ch=getchar();return sym ? -res : res;
}
void print(int x) {if(!x)return;print(x/10);putchar(x%10+'0');
}ll exgcd(ll a,ll b,ll &x,ll &y) {if(b==0) {x=1,y=0;return a;}ll d=exgcd(b,a%b,y,x);y-=a/b*x;return d;
}ll cc(ll a) {ll x,y;exgcd(a,mod,x,y);return (x%mod+mod)%mod;
}
ll a[1000086],b[1000869],c[1000860];
ll inv[1000860];
void invv(ll n){inv[0]=1;for(i=1;i<=n;i++){inv[i]=(mod-mod/a[i])*inv[mod%a[i]]%mod;}}
int main() {ll q;ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>q;for(i=1;i<=n;i++)cin>>a[i];invv(n);b[0]=1;c[n+1]=1;for(i=1;i<=n;i++){b[i]=b[i-1]*a[i]%mod;}for(i=n;i>=1;i--){c[i]=c[i+1]*a[i]%mod;}s1=b[n];// 前缀积 ans=0; while(q--){cin>>l>>r;s2=cc(b[l-1]);s3=cc(c[r+1]);//cout<<s2<<" "<<s3<<endl;//	cout<<s1*s2*s3%mod<<endl;ans^=s1*s2*s3%mod;}cout<<ans;return 0;
}//mio lover


http://www.ppmy.cn/news/127545.html

相关文章

P52页 第24题

#include <stdio.h> int main() { int s999,i,j,n0; for(i1;i<s;i) { for(j1;j<i;j) { if(i%j0) nnj; } if(ni) printf("%d ",i); n0; } return 0; } 2023C电子-0224018-李远豪

2022暑期实践(Django教程学习记录)(第四周3)P52基本实现P53中间件处理

P52基本实现 session在浏览器上查看&#xff0c;F12 session在服务器端查看&#xff0c;数据库django_session # Form和ModelForm两种方式对比 from django import formsclass LoginForm(forms.Form):username forms.CharField(label"用户名",widgetforms.TextInpu…

ThinkPad p52s安装硬盘

1、前一段时间想要入手一台笔记本电脑&#xff0c;看了一圈&#xff0c;最后发现淘宝居然有卖二手ThinkPad的商家&#xff0c;价格便宜加上牌子的口碑&#xff0c;我决定试试。考虑重量性能等一系列因素&#xff0c;选择P52S。 2、由于拿回来的电脑只有一块512固态&#xff0c…

p52题28

编程求数列1&#xff0c;1/2&#xff0c;1/3&#xff0c;1/4&#xff0c;…的所有大于 0.00001的数据项之和并输出结果 写出数列的通项x&#xff0c;求和&#xff0c; 在while循环结构中依次求出每一项数据项&#xff0c;利用&#xff08;x>0.0001&#xff09;作为判断条件…

ubuntu安装方案(联想P52,P2000显卡)

1.U盘制作&#xff08;rufus&#xff09; 2.重启&#xff0c;按enter进bios关闭security boot&#xff0c;选择UEFI Only 3.重启F12选择U盘启动 4.分区 :100G 主 efi:1G 主 home:100G 逻 usr&#xff1a;100G 逻 var: 3G 逻 swap&#xff1a;16G 5.软件更新中的驱动选择 sudo …

P52基因序列统计分析

P52基因序列统计分析 下载P52基因序列&#xff0c;采用Phython, 设置扫描窗口&#xff0c;窗口长度size分别设为1&#xff0c;2&#xff0c;3&#xff0c;每次窗口移动的步长step1, 统计输出单个字符&#xff0c;紧邻两个字符&#xff0c;紧邻三个字符&#xff0c;各自的数目和…

【P52】基于继电器的音频静音电路

TDA1543 还没做完&#xff0c;主要原因是最近一直忙着做别的工作赚钱糊口&#xff0c;做耳放什么的实在要穷死了。 因为 I2S 模块选用了 QCC5125 蓝牙模块&#xff0c;它有一个播放状态输出接口&#xff0c;在音频播放的时候输出高电平&#xff0c;没有播放的时候输出低电平。除…

P52:用类制造对象

** P52&#xff08;用类制造对象&#xff09;&#xff1a; ** P52&#xff08;用类制造对象&#xff09;&#xff1a; 一、用类制造对象举例&#xff1a; 二、对象封装&#xff1a;把数据和对数据的操作放在一起&#xff0c;然后由这些操作去保护内部的数据&#xff0c;数据…