提交时间:2025-03-02 15:36:32
运行 ID: 37079
#include<bits/stdc++.h> #define int long long #define pii pair<int,int> #define mkp make_pair using namespace std; void init(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); //freopen("calculater.in","r",stdin);freopen("calculater.out","w",stdout); //freopen("test.in","r",stdin);freopen("test.out","w",stdout); } inline int rd(){ char ch=getchar(); int t=1; int num=0; while(ch<'0'||ch>'9'){ if(ch=='-')t=-1; ch=getchar(); } while('0'<=ch&&ch<='9'){ num=num*10+(ch-'0');ch=getchar(); } return t*num; } inline void ct(int num){ if(num<0)putchar('-'),num=-num; if(num<10)putchar('0'+num); else ct(num/10),putchar((num%10)+'0'); } long long mod=1<<31; int num[300010]; struct node{ int l,r,num,add,mul,mid; }tree[1200010],tree2[1200010]; inline void fix(int p){ tree[p].add%=mod; tree[p].mul%=mod; tree[p].num%=mod; } inline void pushup(int p){ tree[p].num=tree[p<<1].num+tree[p<<1|1].num; fix(p); } inline void build(int p,int l,int r){ tree[p]={l,r,0,0,1,(l+r)>>1}; if(l==r){ tree[p].num=num[l]; return; } build(p<<1,l,l+r>>1),build(p<<1|1,(l+r>>1)+1,r); pushup(p); } inline void pd(int p){ tree[p<<1].num=(((tree[p].add*(tree[p<<1].r-tree[p<<1].l+1))%mod)+((tree[p<<1].num*tree[p].mul)%mod)); tree[p<<1].add=(tree[p<<1].add*tree[p].mul+tree[p].add)%mod; tree[p<<1].mul=(tree[p<<1].mul*tree[p].mul)%mod; tree[p<<1|1].num=(((tree[p].add*(tree[p<<1|1].r-tree[p<<1|1].l+1))%mod)+((tree[p<<1|1].num*tree[p].mul)%mod)); tree[p<<1|1].add=(tree[p<<1|1].add*tree[p].mul+tree[p].add)%mod; tree[p<<1|1].mul=(tree[p<<1|1].mul*tree[p].mul)%mod; tree[p].mul=1; tree[p].add=0; } inline void multi(int p,int l,int r,int k){ if(l<=tree[p].l&&tree[p].r<=r){ tree[p].mul=(tree[p].mul*k)%mod; tree[p].add=(tree[p].add*k)%mod; tree[p].num=(tree[p].num*k)%mod; return; } pd(p); if(l<=tree[p].mid)multi(p<<1,l,r,k); if(r>tree[p].mid)multi(p<<1|1,l,r,k); pushup(p); } inline void add(int p,int l,int r,int k){ if(l<=tree[p].l&&tree[p].r<=r){ tree[p].add+=k%mod; tree[p].num+=(k*(tree[p].r-tree[p].l+1))%mod; fix(p); return; } pd(p); if(l<=tree[p].mid)add(p<<1,l,r,k); if(r>tree[p].mid)add(p<<1|1,l,r,k); pushup(p); } inline int ask(int p,int l,int r){ if(l<=tree[p].l&&tree[p].r<=r)return tree[p].num; pd(p); int sum=0; if(l<=tree[p].mid)sum+=ask(p<<1,l,r)%mod; if(r>tree[p].mid)sum+=ask(p<<1|1,l,r)%mod; return sum%mod; } void my_mod(int p,int dis){ if(tree[p].l==tree[p].r){ if(tree[p].num>=0)tree[p].num=(tree[p].num+1)>>1; else tree[p].num=-((-tree[p].num+1)>>1); tree[p].add=0,tree[p].mul=1; return; } pd(p); if(dis<=tree[p*2].r)my_mod(p*2,dis); if(dis>=tree[p*2+1].l)my_mod(p*2+1,dis); } int my_ans(int p,int dis){ if(tree2[p].l==tree2[p].r)return tree[p].num%2; if(dis<=tree2[p*2].r)my_mod(p*2,dis); if(dis>=tree2[p*2+1].l)my_mod(p*2+1,dis); pushup(p); } signed main(){ init(); int id,n,m,k; cin>>id>>n>>m>>k; build(1,1,n); for(int i=1;i<=m;i++){ char opt; cin>>opt; if(opt=='/'){ int l,r,k; cin>>l>>r; for(int i=l;i<=r;i++)my_mod(1,i); }else if(opt=='+'){ int l,r,k; cin>>l>>r>>k; add(1,l,r,k); }else if(opt=='-'){ int l,r; cin>>l>>r>>k; add(1,l,r,-k); }else if(opt=='*'){ int l,r; cin>>l>>r>>k; multi(1,l,r,k); } } for(int i=1;i<=n;i++)cout<<abs(ask(1,i,i)%2)<<' '; return 0; }