zoukankan      html  css  js  c++  java
  • 数学计算

    数学计算

    solution

    这个题似乎没啥要想的东西,直接线段树区间乘数然后取%
    注意一点,乘法不同于加法,不能够先%再乘
    WA

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #define int long long
    using namespace std;
    
    inline int read(){
    	int x = 0, w = 1;
    	char ch = getchar();
    	for(; ch > '9' || ch < '0'; ch = getchar()) if(ch == '-') w = -1;
    	for(; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
    	return x * w;
    }
    
    const int maxn = 520520;
    int tot, q, m, opt;
    int mod;
    int a[maxn << 1];
    
    inline void build(int u, int l, int r){
    	if(l == r){
    		a[u] = 1;
    		return;
    	}
    	int mid = l + r >> 1;
    	build(u << 1, l, mid);
    	build(u << 1 | 1, mid + 1, r);
    	a[u] = a[u << 1] * a[u << 1 | 1];
    }
    
    inline void change(int u, int l, int r, int pos, int x){
    	if(l == r){
    		a[u] = x % mod;
    		return;
    	}
    	int mid = l + r >> 1;
    	if(pos <= mid) change(u << 1, l, mid, pos, x);
    	else change(u << 1 | 1, mid + 1, r, pos, x);
    	a[u] = a[u << 1] * a[u << 1 | 1] % mod;
    }
    
    inline void query(int u, int l, int r, int pos, int x){
    	if(l == r){
    		a[u] = x;
    		return;
    	}
    	int mid = l + r >> 1;
    	if(pos <= mod)
    		query(u << 1, l, mid, pos, x);
    	else query(u << 1 | 1, mid + 1, r, pos, x);
    	a[u] = a[u << 1] * a[u << 1 | 1] % mod;
    }
    
    signed main(){
    	int T = read();
    	while(T--){
    		int n = read();
    		mod = read();
    		build(1, 1, n);
    		for(int i = 1; i <= n; i++){
    			opt = read();
    			int m = read();
    			if(opt == 1){
    				cout << a[1] % mod * m % mod << '
    ';
    				change(1, 1, n, i, m);
    			}
    			else{
    				query(1, 1, n, m, 1);
    				cout << a[1] % mod << '
    ';
    			}
    		}
    	}
    	return 0;
    }
    

    AC

    #include<bits/stdc++.h>
    #define in read()
    #define lc (k<<1)
    #define rc (k<<1)|1
    #define N 100009
    #define ll long long
    using namespace std;
    inline int read(){
    	char ch;int f=1,res=0;
    	while((ch=getchar())<'0'||ch>'9') if(ch=='-') f=-1;
    	while(ch>='0'&&ch<='9'){
    		res=(res<<3)+(res<<1)+ch-'0';
    		ch=getchar();
    	}
    	return f==1?res:-res;
    }
    int t,q,mod,m,op;
    ll a[N<<2];
    void build(int k,int l,int r){
    	if(l==r){a[k]=1;return;}
    	int mid=l+r>>1;
    	build(lc,l,mid);build(rc,mid+1,r);
    	a[k]=a[lc]*a[rc];
    }
    void insert(int k,int l,int r,int pos,ll x){
    	if(l==r){a[k]=x%mod;return;}
    	int mid=l+r>>1;
    	if(pos<=mid) insert(lc,l,mid,pos,x);
    	else insert(rc,mid+1,r,pos,x);
    	a[k]=a[lc]*a[rc]%mod;
    }
    void modify(int k,int l,int r,int pos,int x){//dandian xiugai
    	if(l==r){a[k]=x;return;}
    	int mid=l+r>>1;
    	if(pos<=mid) modify(lc,l,mid,pos,x);
    	else modify(rc,mid+1,r,pos,x);
    	a[k]=a[lc]*a[rc]%mod;
    }
    int main(){
    	t=in;
    	while(t--){
    		q=in;mod=in;
    		int i,j,k;
    		build(1,1,q);
    		for(i=1;i<=q;++i){
    			op=in;m=in;
    			if(op==1){
    				printf("%d
    ",a[1]%mod*m%mod);
    				insert(1,1,q,i,m);
    			}
    			else{
    				modify(1,1,q,m,1);
    				printf("%d
    ",a[1]%mod);
    			}
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    An exception was thrown while activating Castle.Proxies.PersonAppServiceProxy. ABP Netcore
    abp 深坑三 Unable to cast object of type 'System.Double' to type 'System.Single'.System.InvalidCastException: Unable to cast object of type 'System.Double' to type 'System.Single'.
    《统计学习方法》笔记--奇异值分解
    《统计学习方法》笔记--聚类方法
    《统计学习方法》笔记--条件随机场
    《统计学习方法》笔记--EM算法
    统计学习方法》笔记--提升方法(二)
    《统计学习方法》笔记--提升方法
    《统计学习方法》笔记--决策树
    《统计学习方法》笔记--逻辑回归
  • 原文地址:https://www.cnblogs.com/rui-4825/p/12981709.html
Copyright © 2011-2022 走看看