求大佬帮调!
查看原帖
求大佬帮调!
654763
smallpeople楼主2024/6/27 21:39
#include<bits/stdc++.h>
using namespace std;

int t,q,mod,cnt;
struct edge
{
	int l,r;
	int x;
}tr[400005];

void pushup(int u)
{
	tr[u].x = ((tr[tr[u].l].x % mod) * (tr[tr[u].r].x % mod)) % mod;
}

void build(int u,int l,int r)
{
	if(l == r)tr[u] = {l,r,1};
	else
	{
		tr[u] = {l,r};
		int mid = (l + r) / 2;
		build(u * 2,l,mid);
		build(u * 2 + 1,mid + 1,r);
		pushup(u);
	}
}

void update(int u,int x,int v)
{
	if(tr[u].l == tr[u].r)tr[u].x = v % mod;
	else
	{
		int mid = (tr[u].l + tr[u].r) / 2;
		if(x <= mid)update(tr[u].l,x,v);
		else update(tr[u].r,x,v);
		pushup(u);
	}
}

int main()
{
	cin>>t;
	while(t --)
	{
		cnt = 0;
		
		cin>>q>>mod;
		
		build(1,1,q);
		
		int op,m;
		for(int i = 1;i <= q;i ++)
		{
			cin>>op>>m;
			cnt ++;
			if(op == 1)
			{
				update(1,cnt,m);
				cout<<tr[1].x<<'\n';
			}
			else
			{
				update(1,cnt,1);
				update(1,m,1);
				cout<<tr[1].x<<'\n';
			}
		}
	}
	
	return 0;
}

(本人纯蒟蒻,刚学线段树)求大佬帮调!

2024/6/27 21:39
加载中...