ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

题解——[TJOI2018]数学计算

2019-09-26 19:00:50  阅读:256  来源: 互联网

标签:题解 ll pos x% 操作 数学计算 TJOI2018 mod


题解——[TJOI2018]数学计算

我真的没看出来这是线段树


题面搬运

小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型:

1 m: x = x * m ,输出 x%mod;

2 pos: x = x / 第pos次操作所乘的数(保证第pos次操作一定为类型1,对于每一个类型1 的操作至多会被除一次),输出x%mod

一共有t组输入(t ≤ 5)

对于每一组输入,第一行是两个数字Q, mod(Q ≤ 100000, mod ≤ 1000000000);

接下来Q行,每一行为操作类型op,操作编号或所乘的数字m(保证所有的输入都是合法的).

1 ≤ Q ≤ 100000

对于每一个操作,输出一行,包含操作执行后的x%mod的值

思路

我们用个线段树维护时间轴即可,初始全为1,1操作将该点修改为 m , 2操作改回 1 即可 。 大水题,但是很妙 。

#include<bits/stdc++.h>
using namespace std ;
const int MAXN = 100005 ;
#define ll long long
inline ll read(){
   ll s=0 ; char g=getchar() ; while(g>'9'||g<'0')g=getchar() ;
   while(g>='0'&&g<='9')s=s*10+g-'0',g=getchar() ; return s ;
}
ll T , Q , mod ;
struct Seg{
   int l , r ;
   ll sum ; 
}t[ MAXN<<2 ];
void  build( int p , int l , int r ){//不用updata,都是1 
   t[ p ].l = l , t[ p ].r = r , t[ p ].sum = 1 ;
   if( l == r )return ;
   int mid = ( l+r )>>1 ;
   build( p<<1 , l , mid ) , build( p<<1|1 , mid+1 ,r ) ;
}
void  change( int p , int loc , ll val ){
   if( t[ p ].l == t[ p ].r ){
       t[ p ].sum = val ; return ;
   }
   int mid = ( t[ p ].l + t[ p ].r )>>1 ;
   if( loc <= mid )change( p<<1 , loc , val ) ;
   else change( p<<1|1 , loc , val ) ; 
   t[ p ].sum = ( t[ p<<1 ].sum*t[ p<<1|1 ].sum )%mod ; 
}
void  delelt( int p , int loc ){
   if( t[ p ].l == t[ p ].r ){
       t[ p ].sum = 1 ; return ;
   }
   int mid = ( t[ p ].l + t[ p ].r )>>1 ;
   if( loc <= mid )delelt( p<<1 , loc ) ;
   else delelt( p<<1|1 , loc ) ;
   t[ p ].sum = ( t[ p<<1 ].sum*t[ p<<1|1 ].sum )%mod ; 
}
int main(){
   T = read() ;
   while( T-- ){
       Q = read() , mod = read() ; ll m1 , m2 ;
       build( 1 , 1 , Q ) ; 
       for( int i = 1 ; i <= Q ; ++i ){
           m1 = read() , m2 = read() ; 
           if( m1 == 1 )
               change( 1 , i , m2 ) ;
           else delelt( 1 , m2 ) ;
           printf("%lld\n", t[ 1 ].sum ) ; 
       }
   }
   return 0 ;
}

如有不足,请大佬指出

标签:题解,ll,pos,x%,操作,数学计算,TJOI2018,mod
来源: https://www.cnblogs.com/ssw02/p/11593712.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有