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

    题目链接

    没质数搞不了逆元。

    发现2操作在去除之前某1操作的影响,然后要求维护连乘。

    单点修改,区间询问。维护区间积。

    上线段树。

    区间询问还是全区间的,没有懒标记,没有查询函数。

    代码(100分):

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<vector>
    #include<queue>
    #include<map>
    #include<set>
    #define IL inline
    #define RG register
    #define _1 first
    #define _2 second
    using namespace std;
    typedef long long LL;
    const int N=1e5;
    
        int n;
        LL mod,a[N+3];
        LL s[N*4+3];
        
    IL int ls(int i){return i<<1;}
    IL int rs(int i){return i<<1|1;}
        
    void mdf(int i,int l,int r,int p,LL x){
        if(l==r){
            s[i]=x;    return ;
        }
        
        int mid=(l+r)>>1;
        if(p<=mid)
            mdf(ls(i),l,mid,p,x);
        else 
            mdf(rs(i),mid+1,r,p,x);
        s[i]=s[ls(i)]*s[rs(i)]%mod;
        
    }
    
    IL void sol(){
        scanf("%d%lld",&n,&mod);
        for(int i=1;i<=n*4;i++)
            s[i]=1;
        for(int i=1;i<=n;i++){
            int opt;
            scanf("%d",&opt);
            if(opt==1){
                LL m;
                scanf("%lld",&m);
                mdf(1,1,n,i,m);
                printf("%lld
    ",s[1]);
                
            }
            else {
                int p;
                scanf("%d",&p);
                mdf(1,1,n,p,1);
                printf("%lld
    ",s[1]);
                
            }
            
        }
        
    }
    
    int main(){
        int t;
        scanf("%d",&t);
        while(t--)
            sol();
    
        return 0;
    
    }
    View Code
  • 相关阅读:
    springboot + self4j 学习笔记
    git 创建本地分支,并且推送到远程分支
    windows 下生成 ssh key
    Topshelf
    ADSL拨号连接
    EF中使用Contains方法
    elasticsearch中的概念简述
    CriticalFinalizerObject的作用
    sqlserver中的统计语法
    Windbg简单介绍
  • 原文地址:https://www.cnblogs.com/Hansue/p/12977096.html
Copyright © 2011-2022 走看看