TLE求分析复杂度
查看原帖
TLE求分析复杂度
933802
ICU152_lowa_IS8楼主2023/12/30 21:13
#include<bits/stdc++.h>
#define int long long
using namespace std;
int p,q,M;
struct tree{
	int val,tag;
}tree[400005];
int a[100005];
inline int ls(int p){
	return p<<1;
}
inline int rs(int p){
	return p<<1|1;
}
inline void pushup(int p){
	tree[p].val=tree[ls(p)].val*tree[rs(p)].val%M;
}
inline void build(int l,int r,int p){
	if(l==r){
		tree[p].val=1;
		return;
	}
	int mid=l+r>>1;
	build(l,mid,ls(p));
	build(mid+1,r,rs(p));
	pushup(p);
}
inline void update(int l,int r,int ql,int qr,int p,int k){
	if(l>qr||r<ql){
		return;
	}
	if(qr>=r&&ql<=l){
		tree[p].val=k;
		return;
	}
	int mid=l+r>>1;
	update(l,mid,ql,qr,ls(p),k);
	update(mid+1,r,ql,qr,rs(p),k);
	pushup(p);
}
inline int query(int l,int r,int ql,int qr,int p){
	if(l>qr||r<ql)return 1;
	if(l==r)return tree[p].val;
	int mid=l+r>>1;
	return query(l,mid,ql,qr,ls(p))*query(mid+1,r,ql,qr,rs(p))%M;
}
signed main(){
	int t;
	cin>>t;
	while(t--){
		cin>>q>>M;
		p=0;
		int N=q;
		build(1,q,1);
		while(N--){
			int op,m;
			cin>>op>>m;
			p++;
//			if(p==5||p==6){
//					cout<<query(1,q,4,4,1)<<"|||\n";
//				}
//			cout<<m<<" "<<p<<"|QAWDS\n";
			if(op==1){
				update(1,q,p,p,1,m);
			}
			else{
//				if(p==6){
////					cout<<query(1,q,4,4,1)<<"|||";
//				}
				update(1,q,m,m,1,1);
			}
			cout<<query(1,q,1,p,1)<<endl;
		}
	} 
	return 0;
}

2023/12/30 21:13
加载中...