A. Array

news2024/9/25 12:28:29

https://codeforces.com/gym/102875/problem/A

p<=30

可以建立30颗线段树维护

然后看操作

一.add 懒标记

二.mul

三.mi 好像不能找到 (a+v)^{k}=?

于是懒标记貌似不能做,

但是考虑结果都要mod p,所以数都在0-p之间

其实就是i-> (操作)%p的映射

那就不用维护别的标记量了,直接映射

mi操作快速幂+拓展欧拉定理

答案可以是每个值的贡献

维护值的数量,开一个桶
维护值的映射位置,懒标记

// Problem: A. Array
// Contest: Codeforces - 2020 Jiangsu Collegiate Programming Contest
// URL: https://codeforces.com/gym/102875/problem/A
// Memory Limit: 1024 MB
// Time Limit: 4000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<cstring>
#pragma GCC optimize(2)
#pragma GCC optimize("inline")
using namespace std;
typedef long long ll;
const int N=1e5+9;
int a[N],b[N],t[N]//暂时用;
int n,p;
int PHI;//phi(p)
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll phi(ll x){
	ll res=x;
	for(int i=2;i<=x/i;i++){
		if(x%i==0){
			res=res/i*(i-1);
			while(x%i==0){
				x/=i;
			}
		}
	}	
	if(x>1){
		res=res/x*(x-1);
	}
	return res;
}
ll qmi(ll a,ll b,ll mod){
	if(gcd(a,p)==1){//oulamo
		b%=PHI;
	}else if(b>=PHI){
		b%=PHI;
		b+=PHI;
	}
	ll res=1;
	while(b){
		if(b&1){
			res=res*a%mod;
		}
		a=a*a%mod;
		b>>=1;
	}
	return res;
}
//线段树
struct SEG{
    #define INF (1ll<<63)
    #define ll long long
    #define tl(id) (id<<1)
    #define tr(id) (id<<1|1)
    #define li inline
	struct Info{//信息
		ll num[33];
		li Info friend operator + (const Info &a,const Info &b){
			Info res;
			for(int i=0;i<p;i++){
				res.num[i]=a.num[i]+b.num[i];
			}
			return res;
		}
	};
	struct Tag{//标记
		ll tag[33];
		Tag(){init();}
		li void init(){
			for(int i=0;i<p;i++){
				tag[i]=i;
			}
		}
		li Tag(int *b){
			for(int i=0;i<p;i++){
				tag[i]=b[i];
			}
		}
		li Tag friend operator + (const Tag &a,const Tag &b){
			Tag t;
			for(int i=0;i<p;i++){
				t.tag[i]=b.tag[a.tag[i]];
			}
			return t;
		}
	};
    struct node{
    	int l,r;
    	Info val;
    	Tag lazy;
    }seg[N<<2];
    #define pushup(id) seg[id].val=seg[tl(id)].val+seg[tr(id)].val;
    li int inrange(int L,int R,int l,int r){return l<=L && R<=r;}
    li int outofrange(int L,int R,int l,int r){return L>r || R<l;}
    li void build(const int id,int l,int r){
        seg[id].l=l,seg[id].r=r;
        seg[id].lazy.init();
        if(l==r){
			seg[id].val.num[a[l]%p]++;           
            return;
        }
        int mid=(l+r)>>1;
        build(tl(id),l,mid);
        build(tr(id),mid+1,r);
        pushup(id);
    }
    li void maketag(int id,Tag v){
        int temp[33]={0};
        for(int i=0;i<p;i++){
        	temp[i]=seg[id].val.num[i];
        	seg[id].val.num[i]=0;
    	}
	    for(int i=0;i<p;i++){
	    	int k=v.tag[i];
	    	seg[id].val.num[k]+=temp[i];//i->k
	    }
    	seg[id].lazy=seg[id].lazy+v;//下传
    }
	 li void pushdown(int id){
    	int ok=0;
    	for(int i=0;i<p;i++){
    		if(seg[id].lazy.tag[i]!=i){
    			ok=1;
    		}
    	}	
    	if(ok){
			maketag(tl(id),seg[id].lazy);    		
			maketag(tr(id),seg[id].lazy);    		
			seg[id].lazy.init();//初始化
    	}
	 }
    li Info query(int id,int l,int r){
        if(inrange(seg[id].l,seg[id].r,l,r)){
            return seg[id].val;
        }else{
        	int mid=(seg[id].l+seg[id].r)>>1;
        	pushdown(id);
        	if(mid>=r){
        		return query(tl(id),l,r);
        	}else if(mid<l){
        		return query(tr(id),l,r);
        	}else{
				return (query(tl(id),l,mid)+query(tr(id),mid+1,r));
        	}
        }
    }
    li void modify(int id,int L,int R,int l,int r,Tag x){
        if(inrange(L,R,l,r)){
            maketag(id,x);
        }else if(!outofrange(L,R,l,r)){
            int mid=(L+R)>>1;
            pushdown(id);
            modify(tl(id),L,mid,l,r,x);
            modify(tr(id),mid+1,R,l,r,x);
            pushup(id);
        }
    }
}tr;
#define Tag SEG::Tag
#define Info SEG::Info
int main(){
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>n>>p;
	PHI=phi(p);
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	tr.build(1,1,n);
	int q;
	cin>>q;
	for(int i=1;i<=q;i++){
		int op,l,r,k;
		cin>>op>>l>>r>>k;
		if(op==1){
			for(int i=0;i<p;i++){
				t[i]=(i+k)%p;
			}	
			Tag v(t);//赋值
			tr.modify(1,1,n,l,r,v);
		}else if(op==2){
			for(int i=0;i<p;i++){
				t[i]=(1ll*i*k)%p;
			}	
			Tag v(t);//赋值
			tr.modify(1,1,n,l,r,v);	
		}else if(op==3){
			for(int i=0;i<p;i++){
				t[i]=qmi(i,k,p)%p;
			}	
			Tag v(t);//赋值
			tr.modify(1,1,n,l,r,v);
		}else if(op==4){
			Info res=tr.query(1,l,r);
			ll ans=0;
			for(int i=0;i<p;i++){
				ans=(ans+qmi(i,k,p)*res.num[i]%p)%p;
			}	
			cout<<ans<<'\n';
		}else{
			Info res=tr.query(1,l,r);
			ll ans=1;
			for(int i=0;i<p;i++){
				ans=(ans*qmi(i,res.num[i],p))%p;
			}	
			cout<<ans<<'\n';
		}
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989149.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL —— 约束

MySQL —— 约束 引言not nulluniqueprimary key —— 主键auto_increment复合主键 foreign key —— 外键插入数据删除主表的数据 default 引言 在设计表的时候&#xff0c;有些列是必填项&#xff08;如果用户不填&#xff0c;那这个数据就没有必要存进数据库&#xff09;&a…

GPT-5:未来已来,你准备好了吗?

GPT-5 一年半后发布&#xff1f;对此你有何期待&#xff1f; IT之家6月22日消息&#xff0c;在美国达特茅斯工程学院周四公布的采访中&#xff0c;OpenAI首席技术官米拉穆拉蒂被问及GPT-5是否会在明年发布&#xff0c;给出了肯定答案并表示将在一年半后发布。此外&#xff0c;穆…

基于STM32的智能宠物喂食器

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 宠物定时喂食远程控制喂食常见问题及解决方案 常见问题解决方案结论 1. 引言 智能宠物喂食器可以通过定时和远程控制&#xff0c;实现对宠物的科学喂养。本文将…

对抗生成:基于CycleGAN的风格迁移

对抗生成&#xff1a;基于CycleGAN的风格迁移 前言相关介绍CycleGAN 的工作原理核心思想主要组件训练目标 优点缺点应用实例总结 实验环境项目地址LinuxWindows 项目结构具体用法准备数据&#xff08;以vangogh2photo为例&#xff09;进行训练&#xff08;以vangogh2photo为例&…

【vulhub靶场之spring】——

简介&#xff1a; Spring是Java EE编程领域的一个轻量级开源框架&#xff0c;该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建&#xff0c;是为了解决企业级编程开发中的复杂性&#xff0c;业务逻辑层和其他各层的松耦合问题&#xff0c;因此它将面向接口的编程思…

Shiro框架漏洞复现(附修复方法)

Apache Shiro是一个强大易用的Java安全框架&#xff0c;提供了认证、授权、加密和会话管理等功能。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 在Shiro框架下&#xff0c;用户登陆成功后会生成一个经过加密的Cookie。其Cookie的Key的值为RememberMe&#xff0…

用Python实现超精准识别图片中的文字,零基础小白也能轻松学会!

将图片中的文字转换成可编辑的文本&#xff08;通常称为光学字符识别&#xff0c;Optical Character Recognition, OCR&#xff09;可以通过Python的一些库来实现。一个流行的OCR库是Tesseract-OCR&#xff0c;它可以通过Python的pytesseract库来调用。首先&#xff0c;你需要在…

【全国大学生电子设计竞赛】2021年B题

&#x1f970;&#x1f970;全国大学生电子设计大赛学习资料专栏已开启&#xff0c;限时免费&#xff0c;速速收藏~

3D,从无知到无畏

欢迎来到 PaQiuQiu 的空间 本文为【3D&#xff0c;从无知到无畏专栏目录】&#xff0c;方便大家更好的阅读! &#x1f680;~写在前面~ 近年来&#xff0c;3D视觉技术在众多领域飞速发展&#xff0c;除了智能机器人、自动驾驶、无人机等无人系统&#xff0c;在我们身边的AR、VR…

Nuxt2:强制删除window.__NUXT__中的数据

一、问题描述 在以前的一篇文章《Nuxt3: 强制删除__NUXT_DATA__的一种方式》中曾介绍了在Nuxt3中如何删除存在于页面id为__NUXT_DATA__的script节点中的数据。 此次&#xff0c;Nuxt2与Nuxt3不同在于它的数据是存在于window.__NUXT__&#xff0c;那么该如何处理呢&#xff1f;…

Python 动态进度条实现,多个实例来展示实现方式

目录 1. 使用 print 函数 2. 使用 tqdm 库 3. 自定义样式 4. 多进度条 5. 嵌套进度条 6. 更新频率控制 7. 动态描述 8. 自定义回调 9. 使用 click 库 10. 使用 rich 库 文末福利 文末赠免费精品编程资料~~ 在编写Python脚本时&#xff0c;特别是在处理长时间运行的…

PDF Guru Anki:一款以PDF为中心的多功能办公学习工具箱

PDF Guru Anki 是一个假想的工具箱&#xff0c;因为目前我没有关于这个具体产品的详细信息。但是&#xff0c;根据这个名字和一般的PDF工具箱功能&#xff0c;我可以想象一些可能的独特功能&#xff0c;这些功能可以包括&#xff1a; PDF 阅读器&#xff1a;提供高效的PDF阅读…

linux下的C++程序

1.安装g编译环境&#xff08;c&#xff09;、gcc编译环境&#xff08;c语言&#xff09; sudo yum install gcc或者gcc-c //安装gcc/g编译(用管理员权限弄&#xff09; 验证是否安装成功 gcc或者g --version //如果显示版本号&#xff0c;则表示安装成功 sudo yum remove g…

Go语言fmt包中print相关方法

Go语言的fmt包提供了多种打印相关的函数&#xff0c;主要用于在控制台或其他输出目标上格式化并输出数据。下面是一些常用的print相关方法的用途和区别&#xff1a; 1.fmt.Print() 功能: fmt.Print() 将参数的内容按默认格式输出到标准输出&#xff08;通常是控制台&#xff…

springcloud loadbalancer nacos无损发布

前言 故事背景 jenkins部署时总是会有几秒钟接口调用报错&#xff0c;观察日志是因为流量被下发到已下线的服务&#xff0c;重启脚本在停止应用之前先调用nacos注销实例api后再重启依然会短暂出现此问题。项目架构是springcloud alibaba,通过openfeign进行微服务之间调用&…

npm vs pnpm 之幽灵依赖

在之前的文章&#x1f4c4; 果断放弃npm切换到pnpm–节约磁盘空间&#xff08;256G硬盘救星&#xff09; 中有提及 npm 扁平化带来的幽灵&#x1f47b;依赖 问题&#xff0c;但没有特别展开&#xff0c;这段时间实际业务中遇到了该问题&#xff0c;特整理如下&#xff1a; ♨️…

Linux C 程序 【03】线程栈空间

1.开发背景 上一个篇章创建了线程&#xff0c;参考 FreeRTOS&#xff0c;每个线程都是有自己的内存空间&#xff0c;Linux上面也是一样的&#xff0c;这个篇章主要描述线程栈空间的设置。 2.开发需求 设计实验&#xff1a; 1&#xff09;创建线程&#xff0c;并配置线程内存大…

充电桩--直流充电桩方案详解

一、直流充电桩介绍 1、直流充电桩介绍 电动汽车市场数量的不断激增&#xff0c;为缓解消费者对其里程焦虑与充电焦虑&#xff0c;配置双向OBC可以实现快速充电&#xff0c;还可将电动汽车当作分布式储能站回馈电网帮助消峰填谷&#xff0c;通过DCFC为电动汽车高效充电&#…

【解决错误】ModuleNotFoundError: No module named ‘progress’

【解决错误】ModuleNotFoundError: No module named ‘progress’ 在Python编程中&#xff0c;遇到“ModuleNotFoundError: No module named ‘progress’”这类错误&#xff0c;通常意味着Python解释器在其环境中找不到名为‘progress’的模块。以下将深入探讨这一错误的产生…

HBM2、HBM2E、HBM3和HBM3E技术

HBM(High Bandwidth Memory)是一种高性能的内存技术,主要用于数据中心、超级计算机、高端服务器、图形处理器(GPU)和AI加速器等领域,因为它能够提供比传统DDR内存更高的带宽和更低的功耗。 HBM2、HBM2E、HBM3和HBM3E技术 HBM2 (High Bandwidth Memory 2) HBM2 是HBM技术…