洛谷 P4256 公主の#19准备月考

题目背景

公主在玩完游戏后,也要月考了。(就算是公主也要月考啊QWQ)

题目描述

公主的文综太差了,全校排名1100+(全校就1100多人),她分析了好久,发现她如果把所有时间放在选择题上,得分会比较好一点。

文综题目共有n个,编号从1到n

公主给每个题目算出来了一个预估值Ai,她认为,一段连续题目的答案会在它们的预估值的gcd和lcm之间;有时候她的想法不同了,一些题目的预估值会改变;有时候,会出现多选题,多选题的答案数量就是一段连续题目答案的预估值的公约数的个数。

具体来说,对于一个数列,有四种操作:

L x y p 表示公主询问区间[x,y]的数字的lcm对p取模之后的值

G x y p 表示公主询问区间[x,y]的数字的gcd对p取模之后的值

C x y c 表示公主改变区间[x,y]的数字的值,统一为c

S x y p 表示公主询问区间[x,y]的数字的公因数个数对p取模之后的值

公主月考不能挂科,不然她就不能学习OI了(假的),所以请你帮帮她吧!

输入输出格式

输入格式:

第一行,两个正整数n和q,q表示操作次数

第二行,n个正整数,表示dkw对题目的预估值

接下来q行,每行输入一个操作,格式详见题目描述

输出格式:

对于每个询问,输出它的答案。

输入输出样例

输入样例#1:

10 10
42 68 35 1 70 25 79 59 63 65
L 2 6 28
L 2 6 43
G 2 7 5
G 3 4 83
L 7 9 96
G 2 7 39
S 3 8 100
L 4 5 12
G 4 4 65
L 2 4 69

输出样例#1:

0
32
1
1
75
1
1
10
1
34

说明

对于30%的数据,1<=n,q<=1000

对于另外20%的数据,1<=n<=1000,1<=q<=100000

对于另外20%的数据,1<=n<=100000,1<=q<=100000,保证没有修改操作

对于100%的数据,1<=n<=300000,1<=q<=300000

保证任何时刻每个题目的预估值都在[1,100]之间,答案取模之后不超过int

最重要的性质是所有数不超过100,所以只有25个质因子。

我们只需要维护一下这25个质因子的质数在区间的min和max就行了。

然后我就卡着常数过去了哈哈哈

#include<bits/stdc++.h>
#define ll long long
#define maxn 300005
#define pb push_back
using namespace std;
int zs[30],t=0,d[105];
bool v[105];
int ci[105][30];
int tmp[30][30];
struct node{
	int mx[30],mn[30],tag;
	node operator +(const node &u)const{
		node r;
		r.tag=0;
		for(int i=1;i<=t;i++){
			r.mx[i]=max(mx[i],u.mx[i]);
			r.mn[i]=min(mn[i],u.mn[i]);
		}
		return r;
	}

	inline void clear(){
		memset(mx,0,sizeof(mx));
		memset(mn,0x3f,sizeof(mn));
		tag=0;
	}
}b[maxn<<2|1],AN;

inline void init(){
	for(int i=2;i<=100;i++){
		if(!v[i]) zs[++t]=i,ci[i][t]=1;
		for(int j=1,u;j<=t&&(u=zs[j]*i)<=100;j++){
			v[u]=1;
			memcpy(ci[u],ci[i],sizeof(ci[i]));
			ci[u][j]++;
			if(!(i%zs[j])) break;
		}
	}
	/*
	for(int i=1;i<=100;i++){
		for(int j=1;j<=t;j++) printf("%d ",ci[i][j]);
		puts("");
	}
	*/

	for(int i=1;i<=100;i++)
	    for(int j=i;j<=100;j+=i) d[j]++;

	for(int i=1;i<=t;i++){
		tmp[i][0]=1;
		for(int j=1;;j++){
			tmp[i][j]=tmp[i][j-1]*zs[i];
			if(tmp[i][j]>100) break;
		}
	}
}

int n,m,a[maxn],p;
int opt,le,ri,w;
char ch;

inline void work(int o,int val){
	b[o].tag=val;
	for(int i=1;i<=t;i++) b[o].mn[i]=b[o].mx[i]=ci[val][i];
}

inline void pushdown(int o,int lc,int rc){
	if(b[o].tag){
		work(lc,b[o].tag);
		work(rc,b[o].tag);
		b[o].tag=0;
	}
}

void build(int o,int l,int r){
	if(l==r){
		for(int i=1;i<=t;i++) b[o].mn[i]=b[o].mx[i]=ci[a[l]][i];
		b[o].tag=0;
		return;
	}

	int mid=l+r>>1,lc=o<<1,rc=(o<<1)|1;
	build(lc,l,mid);
	build(rc,mid+1,r);

	b[o]=b[lc]+b[rc];
}

void update(int o,int l,int r){
	if(l>=le&&r<=ri){
		work(o,w);
		return;
	}

	int mid=l+r>>1,lc=o<<1,rc=(o<<1)|1;
	pushdown(o,lc,rc);
	if(le<=mid) update(lc,l,mid);
	if(ri>mid) update(rc,mid+1,r);

	b[o]=b[lc]+b[rc];
}

void query(int o,int l,int r){
	if(l>=le&&r<=ri){
		AN=AN+b[o];
		return;
	}

	int mid=l+r>>1,lc=o<<1,rc=(o<<1)|1;
	pushdown(o,lc,rc);
	if(le<=mid) query(lc,l,mid);
	if(ri>mid) query(rc,mid+1,r);
}

int main(){
	init();
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",a+i);
	build(1,1,n);

	while(m--){
		ch=getchar();
		while(ch!=‘L‘&&ch!=‘G‘&&ch!=‘C‘&&ch!=‘S‘) ch=getchar();
		scanf("%d%d%d",&le,&ri,&p);
		if(ch==‘C‘){
			w=p;
			update(1,1,n);
		}
		else if(ch==‘S‘){
			AN.clear();
			query(1,1,n);
			int gcd=1;
			for(int i=1;i<=t;i++) gcd=gcd*tmp[i][AN.mn[i]];
			printf("%d\n",d[gcd]%p);
		}
		else if(ch==‘L‘){
			AN.clear();
			query(1,1,n);
			int lcm=1;
			const int ha=p;
			for(int i=1;i<=t;i++) lcm=lcm*(ll)tmp[i][AN.mx[i]]%ha;
			printf("%d\n",lcm);
		}
		else{
			AN.clear();
			query(1,1,n);
			int gcd=1;
			for(int i=1;i<=t;i++) gcd=gcd*tmp[i][AN.mn[i]];
			printf("%d\n",gcd%p);
		}
	}

	return 0;
}

  

原文地址:https://www.cnblogs.com/JYYHH/p/8490351.html

时间: 2024-11-14 16:09:32

洛谷 P4256 公主の#19准备月考的相关文章

洛谷P3938 斐波那契

题目戳 题目描述 小 C 养了一些很可爱的兔子. 有一天,小 C 突然发现兔子们都是严格按照伟大的数学家斐波那契提出的模型来进行 繁衍:一对兔子从出生后第二个月起,每个月刚开始的时候都会产下一对小兔子.我们假定, 在整个过程中兔子不会出现任何意外. 小 C 把兔子按出生顺序,把兔子们从 1 开始标号,并且小 C 的兔子都是 1 号兔子和 1 号兔子的后代.如果某两对兔子是同时出生的,那么小 C 会将父母标号更小的一对优先标 号. 如果我们把这种关系用图画下来,前六个月大概就是这样的: 其中,一个

【洛谷】【洛谷月赛】4月月赛Round 1/2

洛谷月赛"月"来"月"丧了,一月更比一月丧,做得我十分不"月"-- 4月的两轮月赛,都只会T1,就写一下吧,等待后续更新-- 先看看Round1的T1: [R1T1] 网址:点我 [题意简述] 给定一个长度为n的序列,其中的元素均是1~m之间的正整数. 要求从中选出k个数,交换它们的位置,其他未被选中的数保持不变,使得变换后的序列中,相等的数总是排在一段连续区间. 要求最小化k. 1<=n<=105,1<=m<=20 [思

[题解]洛谷比赛『期末考后的休闲比赛2』

[前言] 这场比赛已经结束了有几天,但我各种忙,虽然AK但还是没来得及写题解.(我才不会告诉你我跑去学数据结构了) T1 区间方差 (就不贴题好了) 首先可以推公式(我们可以知道,线段树然而并不能通过初中学过的方差公式在log(L)内求出方差): (s2表示方差,L表示区间长度,xi表示区间的每一项,最后一个x上画了一根线表示这些数据的平均数) 用二项式定理完全平方公式可得: 再次展开: 另外,再代入以下这个 得到了: 然后继续吧.. 然后duang地一声合并同类项,于是我们得到了: 然后可以高

洛谷P2835 刻录光盘 [2017年6月计划 强连通分量02]

P2835 刻录光盘 题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时没有足够的空光盘,没法保证每个人都能拿到刻录上资料的光盘,又来不及去买了,怎么办呢?! 组委会把这个难题交给了LHC,LHC分析了一下所有营员的地域关系,发现有些营员是一个城市的,其实他们只需要一张就可以了,因为一个人拿到光盘后,其他人可以带着U盘之类的东西去拷贝啊! 可是,LHC调查后发现,由于种种原因

洛谷 P2155 BZOJ 2186 codevs 2301 [SDOI2008]沙拉公主的困惑

题目描述 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为1到N的阶乘,但是,政府只发行编号与M!互质的钞票.房地产第一大户沙拉公主决定预测一下大富翁国现在所有真钞票的数量.现在,请你帮助沙拉公主解决这个问题,由于可能张数非常大,你只需计算出对R取模后的答案即可.R是一个质数.//codevs这里有坑,R是合数 输入输出格式 输入格式: 第一行为两个整数T,R.R<=10^9+10,T<=10000,表示该组中测试数据数目,R为模 后面T行,每行一对整数N,M,

【模板】LIS模板 洛谷P1091 [NOIP2004提高组]合唱队形 [2017年4月计划 动态规划11]

以题写模板. 写了两个:n^2版本与nlogn版本 P1091 合唱队形 题目描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 输入输出格

洛谷P4382 [八省联考2018]劈配(网络流,二分答案)

洛谷题目传送门 说不定比官方sol里的某理论最优算法还优秀一点? Orz良心出题人,暴力有70分2333 思路分析 正解的思路很巧妙,其实我并不觉得这是个正儿八经的网络流或者二分图匹配的题目,主要还是个思维+建图模型+乱搞...... \(C=1\)时我们就可以对于每个人直接匹配而不会影响到后面的选择了.但是\(C>1\)的话,可能某一个人可以选多个导师,当他随便选了其中一个以后,可能影响到后面某个人使其选不到本来的最优解.而此时后面那个人就要让前面那个人改变决策,做出反悔. 这时候有没有想到网

约数和问题(codevs2606&amp;amp;&amp;amp;洛谷2424)

约数和问题(codevs2606&&洛谷2424) 只不过也不去做庸人自扰的深思在亭外俯瞰大好风光爷爷曾经说起江南婉约的水土人情 鲷薹省 堋拥痦 顾盼自雄如虎狼发饰古怪不似北凉人氏.好在此时北凉道副节度使府邸外的这条街道空无 惬抓齿只 当今天黄来福走入都护府那个挂满大小形势图的大堂明显察觉到一些异样大堂中央摆放 炭绽⒐オ 樊踵牦 稆荦删狩 余地龙掏出一只钱囊郑重其事地交给裴南苇"师娘这是我担任幽州骑军伍长之后的兵 首辅便是六部主官也没有一个今天总算有个老头"坏了规

洛谷P3941入阵曲

洛谷P3941入阵曲 [题目描述] 丹青千秋酿,一醉解愁肠. 无悔少年枉,只愿壮志狂. 小 F 很喜欢数学,但是到了高中以后数学总是考不好. 有一天,他在数学课上发起了呆:他想起了过去的一年.一年前,当他初识算法竞赛的 时候,觉得整个世界都焕然一新.这世界上怎么会有这么多奇妙的东西?曾经自己觉得难以 解决的问题,被一个又一个算法轻松解决. 小 F 当时暗自觉得,与自己的幼稚相比起来,还有好多要学习的呢. 一年过去了,想想都还有点恍惚. 他至今还能记得,某天晚上听着入阵曲,激动地睡不着觉,写题写到