zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SDOI2008]仪仗队
    洛谷P1414 又是毕业季II
    P3865 【模板】ST表
    [HAOI2007]理想的正方形
    noip 2011 选择客栈
    [AHOI2009]中国象棋
    洛谷P3387 【模板】缩点
    [SCOI2005]最大子矩阵
    [CQOI2009]叶子的染色
    LibreOJ #116. 有源汇有上下界最大流
  • 原文地址:https://www.cnblogs.com/Scx117/p/9177546.html
Copyright © 2011-2022 走看看