P4588 [TJOI2018] 数学计算

原题链接

题解

由于模拟会爆 longlong,所以用线段树维护每次操作的值,初始每次操作的值均为1

操作一令对应节点变为 m

操作二令对应节点变为 1

返回整棵树的值(相乘)

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

ll tree[400005];
ll q,mod;

void update(int node,int l,int r,int id,int v)
{
    if(l>id||r<id) return;

    if(l==id&&r==id)
    {
        tree[node]=v%mod;
        return;
    }

    int mid=(l+r)/2;
    update(2*node,l,mid,id,v);
    update(2*node+1,mid+1,r,id,v);

    tree[node]=tree[node*2]*tree[node*2+1]%mod;
}


void solve()
{
    cin>>q>>mod;

    fill(tree,tree+4*q+1,1);

    ll x=1;
    for(int i=1;i<=q;i++)
    {
        int op;
        cin>>op;
        if(op==1)
        {
            int m;
            cin>>m;

            update(1,1,q,i,m);
            cout<<tree[1]<<'\n';
        }
        else
        {
            int pos;
            cin>>pos;
            update(1,1,q,pos,1);
            cout<<tree[1]<<'\n';
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    cin>>t;
    while(t--) solve();
    return 0;
}


posted @   纯粹的  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示