Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37059 | A21μΘ_wjy | 【S】T3 | C++ | 通过 | 100 | 1106 MS | 33028 KB | 2556 | 2025-03-02 14:41:33 |
#include<bits/stdc++.h> #define int long long #define LL __int128_t #define lc(p) ((p)<<1) #define rc(p) ((p)<<1|1) using namespace std; const int N=3e5+7; const int mod=(1ll<<61); int id,n,q,k; inline int D(int x){ if(x>=0)return x/2; return -((-x+1)/2); } struct SGT{ struct Node{ int Mul,Add,Sum,Len; }d[N<<2]; inline void Calc(int p,int Mul,int Add){ LL e=1; d[p].Mul=e*d[p].Mul*Mul%mod; d[p].Add=e*d[p].Add*Mul%mod; d[p].Sum=e*d[p].Sum*Mul%mod; (d[p].Add+=Add)%=mod; (d[p].Sum+=d[p].Len*Add%mod)%=mod; } inline void pd(int p){ Calc(lc(p),d[p].Mul,d[p].Add); Calc(rc(p),d[p].Mul,d[p].Add); d[p].Mul=1;d[p].Add=0; } inline void pu(int p){d[p].Sum=(d[lc(p)].Sum+d[rc(p)].Sum)%mod;} inline void Build(int p,int l,int r){ d[p]=(Node){1,0,0,r-l+1}; if(l==r)return;int mid=l+r>>1; Build(lc(p),l,mid),Build(rc(p),mid+1,r); } inline void Add(int p,int l,int r,int L,int R,int x){ if(L<=l&&r<=R)return void(Calc(p,1,x)); int mid=l+r>>1;pd(p); if(L<=mid)Add(lc(p),l,mid,L,R,x); if(R>mid)Add(rc(p),mid+1,r,L,R,x); pu(p); } inline void Mul(int p,int l,int r,int L,int R,int x){ if(L<=l&&r<=R)return void(Calc(p,x,0)); int mid=l+r>>1;pd(p); if(L<=mid)Mul(lc(p),l,mid,L,R,x); if(R>mid)Mul(rc(p),mid+1,r,L,R,x); pu(p); } inline void Div(int p,int l,int r,int L,int R){ if(l==r)return void(d[p].Sum=D(d[p].Sum)); int mid=l+r>>1;pd(p); if(L<=mid)Div(lc(p),l,mid,L,R); if(R>mid)Div(rc(p),mid+1,r,L,R); pu(p); } inline int Q(int p,int l,int r,int x){ if(l==r)return d[p].Sum; int mid=l+r>>1;pd(p); if(x<=mid)return Q(lc(p),l,mid,x); return Q(rc(p),mid+1,r,x); } }T; signed main(){ #ifndef ONLINE_JUDGE freopen("calculator.in","r",stdin); freopen("calculator.out","w",stdout); #endif cin>>id>>n>>q>>k; T.Build(1,1,n); while(q--){ char ch; int l,r,x; cin>>ch>>l>>r; if(ch=='+'||ch=='-'){ cin>>x; if(ch=='-')x=-x; T.Add(1,1,n,l,r,x); } else if(ch=='*'){ cin>>x; T.Mul(1,1,n,l,r,x); } else T.Div(1,1,n,l,r); } for(int i=1;i<=n;i++)cout<<abs(T.Q(1,1,n,i))%2<<" "; cout<<endl; return 0; }