卧薪尝胆,厚积薄发。
      
    
            TJOI2018 数学计算
        
        
        Description:
有一个数
$x$
初始值为
$1$
,有
$Q$
次操作,操作有两种类型:
$1\;m$
:
$x=x\times m$
输出
$x\%mod$
;
$2\;pos$
:
$x=x/$
第
$pos$
次操作所乘的数,输出
$x\%mod$
;
$1\leqslant n\leqslant10^5$
Solution:
如果
$mod$
不是质数的话就没有逆元,所以这是一个容易加入难以删除的问题,由此我们可以想到线段树分治,如果操作为
$1$
,那么这一位为
$m$
,否则这一位为
$1$
,然后
$1$
操作就是在最后加数,
$2$
操作就是把某一位清
$1$
,查询就是查询一个前缀积。
Code:
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
int n,mod;
#define MAXN 100010
struct node
{
	int lc,rc;
	int sum;
}t[MAXN << 1];
int ptr = 0;
int newnode(){return ++ptr;}
int root;
#define mid ((l + r) >> 1)
void build(int &rt,int l,int r)
{
	rt = newnode();t[rt].sum = 1;
	if(l == r)return;
	build(t[rt].lc,l,mid);
	build(t[rt].rc,mid + 1,r);
	t[rt].sum = 1ll * t[t[rt].lc].sum * t[t[rt].rc].sum % mod;
	return;
}
void add(int rt,int p,int k,int l,int r)
{
	if(l == r)
	{
		t[rt].sum = k;
		return;
	}
	if(p <= mid)add(t[rt].lc,p,k,l,mid);
	else add(t[rt].rc,p,k,mid + 1,r);
	t[rt].sum = 1ll * t[t[rt].lc].sum * t[t[rt].rc].sum % mod;
	return;
}
int query(int rt,int L,int R,int l,int r)
{
	if(L <= l && r <= R)return t[rt].sum;
	int res = 1;
	if(L <= mid)res = 1ll * res * query(t[rt].lc,L,R,l,mid) % mod;
	if(R > mid)res = 1ll * res * query(t[rt].rc,L,R,mid + 1,r) % mod;
	return res;
}
void work()
{
	ptr = 0; 
	scanf("%d%d",&n,&mod);
	build(root,1,n);
	int x,y;
	for(int i = 1;i <= n;++i)
	{
		scanf("%d%d",&x,&y);
		if(x == 1)
		{
			add(root,i,y,1,n);
			printf("%d\n",query(root,1,i,1,n));
		}
		else
		{
			add(root,y,1,1,n);
			printf("%d\n",query(root,1,i,1,n));
		}
	}
	return;
}
int main()
{
	int testcases = 0;
	scanf("%d",&testcases);
	while(testcases--)work();
	return 0;
}
 In tag:
数据结构-线段树分治
          In tag:
数据结构-线段树分治 
          
        
        Copyright © 2020
        
          wjh15101051
        
      
      ღゝ◡╹)ノ♡
     Date: Sat Sep 29 20:34:08 CST 2018
          Date: Sat Sep 29 20:34:08 CST 2018
           In Category:
          In Category:
           
         Timeline
            Timeline
           About
            About
           Toolbox
            Toolbox
           Friends
              Friends