• loj2573[TJOI2018]数字计算


    题意:操作1:x=x*m,输出x%mod。2.x/=map[m]。m即第m次操作,保证该次操作为1操作,并且每个操作最多只会被删一次。q<=1e5。

    线段树维护操作信息的乘积,删除把对应位置的权改成1。

    标程:

     1 #include<bits/stdc++.h>
     2 #define mid ((l+r)>>1)
     3 using namespace std;
     4 typedef long long ll;
     5 int read()
     6 {
     7    int x=0,f=1;char ch=getchar();
     8    while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
     9    while (ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
    10    return x*f;
    11 }
    12 const int N=1e5+5;
    13 int q,mod,op,x; ll sum[N<<2];
    14 void build(int k,int l,int r)
    15 {
    16     sum[k]=1;
    17     if (l==r) return;
    18     build(k<<1,l,mid);build(k<<1|1,mid+1,r);
    19 }
    20 void ins(int k,int l,int r,int x,int y)
    21 {
    22     if (l==r) {sum[k]=y;return;}
    23     if (x<=mid) ins(k<<1,l,mid,x,y);
    24     else ins(k<<1|1,mid+1,r,x,y);
    25     sum[k]=(ll)sum[k<<1]*sum[k<<1|1]%mod;
    26 }
    27 int main()
    28 {
    29     int T=read();
    30     while (T--)
    31     {
    32         q=read();mod=read();
    33         build(1,1,q);
    34         for (int i=1;i<=q;i++)
    35         {
    36             op=read();x=read();
    37             if (op==1) ins(1,1,q,i,x);
    38             else ins(1,1,q,x,1);
    39             printf("%lld
    ",sum[1]);
    40         }    
    41     }
    42     return 0;
    43 }
    View Code
  • 相关阅读:
    SQL server使用
    NCC 事务
    springboot学习
    容器
    x86汇编
    git之.gitignore文件用途
    Linux系统安装之U盘引导
    使用异步I/O大大提高应用程序的性能
    Python3.5 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”?(转载)
    python之正则表达式
  • 原文地址:https://www.cnblogs.com/Scx117/p/9177546.html
Copyright © 2020-2023  润新知