zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    LDA的整体流程
    java中字符串的用法
    verification Code
    properties
    Hash
    substring的问题
    LDA和PLSA的区别
    Step By Step(Lua环境)
    Step By Step(Lua调用C函数)
    Step By Step(Lua弱引用table)
  • 原文地址:https://www.cnblogs.com/For-Miku/p/15334603.html
Copyright © 2011-2022 走看看