• P4588 [TJOI2018]数学计算


    Jennie
    显然可以模拟,但是谁会喜欢写高精和逆元呢?

    需要撤销乘法操作,该怎么做呢

    如果说一个个乘法结合起来的话,那么撤销就是把一个数变成1

    那么就是一个线段树的问题了

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #define int long long
    using namespace std;
    int tree[400005];
    int t;
    int q,mod;
    int f,x;
    void pushup(int r){
    	tree[r]=tree[r<<1]*tree[r<<1|1]%mod;
    }
    void chan(int ro,int l,int r,int L,int R,int key){
    	if(L<=l&&r<=R){
    		tree[ro]=key%mod;
    		return ;
    	}
    	int mid=(l+r)>>1;
    	if(L<=mid) chan(ro<<1,l,mid,L,R,key);
    	if(R>mid) chan(ro<<1|1,mid+1,r,L,R,key);
    	pushup(ro); 
    }
    
    signed main(){
    	scanf("%d",&t);
    	while(t--){
    		scanf("%d%d",&q,&mod);
    		for(int i=1;i<=q;++i){
    			chan(1,1,q,i,i,1);
    		} 
    		for(int i=1;i<=q;++i){
    			scanf("%d%d",&f,&x);
    			if(f==1){
    				chan(1,1,q,i,i,x);
    				cout<<tree[1]<<endl;
    			}else{
    				chan(1,1,q,x,x,1);
    				cout<<tree[1]<<endl;
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    列表、元组、字符串的相互转化
    python中的常用BIF
    python中的类型
    python内置模块
    打印字体颜色整理
    xml操作
    内置函数
    迭代器
    装饰器
    函数
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15334603.html
Copyright © 2020-2023  润新知