首页 > 其他分享 >数学计算

数学计算

时间:2023-09-26 13:33:32浏览次数:40  
标签:int mid -- build vv 数学计算 define

P4588 [TJOI2018] 数学计算

考虑将所有 \(1\) 操作涉及到的数存入线段树中,初始为 \(1\)。

1操作:在某个位置修改为某个值。

2操作:在某个位置修改为 \(1\)。

查询:查询所有数的乘积。

无需懒标记,可以直接将所有操作数按照下标丢进去,也可以先提取出操作1(线段树的大小会小一些)。

直接做

#include<cstdio>
using namespace std;
#define Ed for(int i=h[x];~i;i=ne[i])
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
#define Wh while
#define ls p<<1
#define rs p<<1|1
const int N=100010,M=4*N;
int T,m,v[M],l[M],r[M];
#define pushup v[p]=1ll*v[ls]*v[rs]%m
void build(int p,int L,int R){
    l[p]=L,r[p]=R,v[p]=1;
    if(L==R)return;
    int mid=L+R>>1;
    build(ls,L,mid);
    build(rs,mid+1,R);
}
void update(int p,int x,int vv){
    if(l[p]==r[p]){
        v[p]=vv;
        return;
    }
    int mid=l[p]+r[p]>>1;
    if(x<=mid)update(ls,x,vv);
    else update(rs,x,vv);
    pushup;
}
void solve(){
    int n;
    scanf("%d%d",&n,&m);
    build(1,1,n);
    E(i, n){
        int op,w;
        scanf("%d%d",&op,&w);
        if(op==1)update(1,i,w);
        else update(1,w,1);
        printf("%d\n",v[1]);
    }
}
int main(){
    #ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
    #endif
    scanf("%d",&T);
    W(T)solve();
    return 0;
}

提取操作1再做

#include<cstdio>
using namespace std;
#define Ed for(int i=h[x];~i;i=ne[i])
#define Ls(i,l,r) for(int i=l;i<r;++i)
#define Rs(i,l,r) for(int i=l;i>r;--i)
#define Le(i,l,r) for(int i=l;i<=r;++i)
#define Re(i,l,r) for(int i=l;i>=r;--i)
#define L(i,l) for(int i=0;i<l;++i)
#define E(i,l) for(int i=1;i<=l;++i)
#define W(t) while(t--)
#define Wh while
#define ls p<<1
#define rs p<<1|1
const int N=100010,M=4*N;
int T,a[N],m,op[N],w[N],id[N],k,v[M],l[M],r[M];
#define pushup v[p]=1ll*v[ls]*v[rs]%m
void build(int p,int L,int R){
    l[p]=L,r[p]=R,v[p]=1;
    if(L==R)return;
    int mid=L+R>>1;
    build(ls,L,mid);
    build(rs,mid+1,R);
}
void update(int p,int x,int vv){
    if(l[p]==r[p]){
        v[p]=vv;
        return;
    }
    int mid=l[p]+r[p]>>1;
    if(x<=mid)update(ls,x,vv);
    else update(rs,x,vv);
    pushup;
}
void solve(){
    k=0;
    int n;
    scanf("%d%d",&n,&m);
    E(i, n){
        scanf("%d%d",op+i,w+i);
        if(op[i]==1)id[i]=++k;
    }
    build(1,1,k);
    E(i, n){
        if(op[i]==1)update(1,id[i],w[i]);
        else update(1,id[w[i]],1);
        printf("%d\n",v[1]);
    }
}
int main(){
    #ifndef ONLINE_JUDGE
    freopen("1.in","r",stdin);
    #endif
    scanf("%d",&T);
    W(T)solve();
    return 0;
}

二者时间、空间、代码复杂度上各有优势,任意选择。

标签:int,mid,--,build,vv,数学计算,define
From: https://www.cnblogs.com/wscqwq/p/17729894.html

相关文章

  • 前端 数学计算 big.js 使用
     解决0.1+0.2不等于0.3的问题 解决方法方法一,同时扩大倍数再除以相同的倍数 0.1+0.2//0.30000000000000004(0.1*10+0.2*10)/10//0.3方法二,第三方库bignumber.jsmath.jsbig.js big.js基础用法运算//运算//constplus=Big(0.1).p......
  • 数学计算常用数值
    指数对数e=2.71828ln2=0.7 ln3=1.1ln5=1.6log10(2)=0.3;log10(3)=0.5log10(5)=0.7log2(10)=3.3ln(10)=2.3(用于对数转换计算,如ln(5)=ln10*log10(5)=2.3*0.7=1.6)三角函数平方、平方根11²=12112²=14413²=16914²=19615²=22516²=25......
  • MATLAB R2023a Mac(专业编程和数学计算软件)
    MATLABr2023是一款功能强大的编程和数学计算工具,取用于处理科学、工程和数学应用程序中的复杂数据,可用于科学研究、信号处理、计算机视觉,机器学习,人工智能以及相关软件领域。适用范围:MATLAB是一款功能强大的编程工具,可以帮助您完成科学、工程或数学应用程序的开发工作。在您进......
  • JavaScript的数学计算库:decimal.js
    Anarbitrary-precisionDecimaltypeforJavaScript.功能整数和浮点数简单但功能齐全的API复制JavaScript和对象的许多方法Number.prototypeMath还处理十六进制、二进制和八进制值比Java的BigDecimalJavaScript版本更快,更小,也许更容易使用无依赖关系广泛的平......
  • MATLAB R2023a Mac(专业编程和数学计算软件)
    MATLABr2022b是一款功能强大的编程和数学计算工具,取用于处理科学、工程和数学应用程序中的复杂数据,可用于科学研究、信号处理、计算机视觉,机器学习,人工智能以及相关软件领域。适用范围:MATLAB是一款功能强大的编程工具,可以帮助您完成科学、工程或数学应用程序的开发工作。在您进......
  • 深入理解 python 虚拟机:魔术方法之数学计算
    深入理解python虚拟机:魔术方法之数学计算在本篇文章当中主要给大家介绍在python当中一些常见的魔术方法,本篇文章主要是关于与数学计算相关的一些魔术方法,在很多科学计算的包当中都使用到了这些魔术方法。大小比较当我们在Python中定义自己的类时,可以通过重写一些特殊方法来......
  • 跟姥爷深度学习6 卷积网络的数学计算
    一、前言前面简单用TensorFlow的全连接网络做了气温预测然后深入了解了一下全连接网络的数学计算,接着用CNN(卷积)网络做了手写数字识别,本篇就接着这个节奏来看卷积网络的数学计算。二、卷积网络回顾前面我们使用卷积网络时并没有说太明白,特别是一些参数的含义,这里先补一下功课。......
  • 554.488/688   应用数学计算
    554.488/688ComputingforAppliedMathematicsSpring2023-FinalProjectAssignmentTheaimofthisassignmentistogiveyouachancetoexerciseyourskillsatpredictionusingPython.Youhavebeensentanemailwithalinktodatacollectedonarandom......
  • 跟姥爷深度学习4 从数学计算看神经网络
    一、前言我们前面简单的做了一个气温预测,经过反复调试,效果还不错。实际上在这个方向上我们还可以更进一步优化,但因为我们是学习嘛,主要还是看广度而不是深度。考虑到后面要开始学习卷积网络,我们必须把更基础的内容搞明白才行,比如神经网络到底是如何工作的,如果不搞明白后面卷积就只......
  • JavaScript的数学计算库:decimal.js
    阅读目录官网文档decimal.js特性安装实例代码加减乘除官网文档文档:https://mikemcl.github.io/decimal.js/github:https://github.com/MikeMcl/decimal.jsnpm地址:https......