zoukankan      html  css  js  c++  java
  • BZOJ5334: [Tjoi2018]数学计算

    BZOJ5334: [Tjoi2018]数学计算

    https://lydsy.com/JudgeOnline/problem.php?id=5334

    分析:

    • 线段树按时间分治即可。

    代码:

    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cstdlib>
    using namespace std;
    #define N 100050
    #define ls p<<1
    #define rs p<<1|1
    int mod;
    typedef long long ll;
    int n,bg[N],ed[N],op[N],xx[N],M;
    ll tr[N<<2];
    void build(int l,int r,int p) {
    	tr[p]=1; 
    	if(l==r) return ;
    	int mid=(l+r)>>1;
    	build(l,mid,ls); build(mid+1,r,rs);
    }
    void update(int l,int r,int x,int y,int v,int p) {
    	if(x<=l&&y>=r) {
    		tr[p]=tr[p]*v%mod; return ;
    	}
    	int mid=(l+r)>>1;
    	if(x<=mid) update(l,mid,x,y,v,ls);
    	if(y>mid) update(mid+1,r,x,y,v,rs);
    }
    void dfs(int l,int r,int p,ll now) {
    	now=now*tr[p]%mod;
    	if(l==r) {printf("%lld
    ",now); return ;}
    	int mid=(l+r)>>1;
    	dfs(l,mid,ls,now); dfs(mid+1,r,rs,now);
    }
    void solve() {
    	scanf("%d%d",&n,&mod);
    	int i;
    	for(i=1;i<=n;i++) {
    		scanf("%d",&op[i]);
    		if(op[i]==1) {
    			scanf("%d",&xx[i]);
    			bg[i]=i, ed[i]=n;
    		}else {
    			scanf("%d",&xx[i]);
    			ed[xx[i]]=i-1;
    		}
    	}
    	build(1,n,1);
    	for(i=1;i<=n;i++) {
    		if(op[i]==1) {
    			update(1,n,bg[i],ed[i],xx[i],1);
    		}
    	}
    	dfs(1,n,1,1);
    }
    int main() {
    	int T;
    	scanf("%d",&T);
    	while(T--) solve();
    }
    
  • 相关阅读:
    angularjs $index用来取顺序
    angularjs &登录跳转
    if(!confirm("您确定删除吗?")){return;}
    登录跳转
    undefined null测试
    git生成密钥
    遍历map
    网络相关名词解释
    redis的Pub/Sub
    SQLAlchemy的使用
  • 原文地址:https://www.cnblogs.com/suika/p/10230077.html
Copyright © 2011-2022 走看看