Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
37095 | 22级廖思学 | 【S】T3 | C++ | 运行超时 | 8 | 4000 MS | 33276 KB | 3516 | 2025-03-02 19:24:29 |
#include<bits/stdc++.h> using namespace std; #define int long long #define ls pos<<1 #define rs pos<<1|1 const int N=3e5+10; const int M=(1ll<<61); int id,n,q,K,l,r,w,ans[N]; char op; struct Tree{int x,lm,lp;}t[N<<2]; int mul(int a,int b){ int ans=0; while(b>0){ if(b&1)ans=(ans+a)%M; a=(a+a)%M;b>>=1; }return ans; } void pushup(int pos){t[pos].x=(t[ls].x+t[rs].x)%M;} void pushdown(int pos,int l,int r){ int mid=(l+r)>>1; t[ls].x=mul(t[ls].x,t[pos].lm); t[rs].x=mul(t[rs].x,t[pos].lm); t[ls].lm=mul(t[ls].lm,t[pos].lm); t[ls].lp=mul(t[ls].lp,t[pos].lm); t[rs].lm=mul(t[rs].lm,t[pos].lm); t[rs].lp=mul(t[rs].lp,t[pos].lm); // t[ls].x=(t[ls].x+mul(t[pos].lp,mid-l+1))%M; t[rs].x=(t[rs].x+mul(t[pos].lp,r-mid))%M; t[ls].lp=(t[ls].lp+t[pos].lp)%M; t[rs].lp=(t[rs].lp+t[pos].lp)%M; t[pos].lm=1;t[pos].lp=0; } void init(int pos,int l,int r){ if(l==r){t[pos].lm=1;return;} int mid=(l+r)>>1; init(ls,l,mid);init(rs,mid+1,r); } void update(int pos,int l,int r,int ql,int qr,int k){ // cout<<pos<<" "<<l<<" "<<r<<" "<<ql<<" "<<qr<<" "<<k<<endl; if(l>=ql&&r<=qr){ t[pos].x=(t[pos].x+mul(r-l+1,k))%M; t[pos].lp=(t[pos].lp+k)%M;return; } pushdown(pos,l,r); int mid=(l+r)>>1; if(ql<=mid)update(ls,l,mid,ql,qr,k); if(qr>mid)update(rs,mid+1,r,ql,qr,k); pushup(pos); } void update1(int pos,int l,int r,int ql,int qr,int k){ // cout<<pos<<" "<<l<<" "<<r<<" "<<ql<<" "<<qr<<" "<<k<<endl; if(l>=ql&&r<=qr){ // cout<<"!!!"<<t[pos].x<<" "; t[pos].x=mul(t[pos].x,k);//cout<<t[pos].x<<" "; t[pos].lp=mul(t[pos].lp,k); t[pos].lm=(t[pos].lm,k);//cout<<t[pos].lm<<endl; return; } pushdown(pos,l,r); int mid=(l+r)>>1; if(ql<=mid)update1(ls,l,mid,ql,qr,k); if(qr>mid)update1(rs,mid+1,r,ql,qr,k); pushup(pos); } int D(int x){ if(x%2==0)return x/2; return (x-1)/2; } void modify(int pos,int l,int r,int qpos){ // cout<<pos<<" "<<l<<" "<<r<<" "<<qpos<<endl; // cout<<pos<<" "<<l<<" "<<r<<" "<<qpos<<endl; if(l==r){t[pos].x=D(t[pos].x);return;} pushdown(pos,l,r); int mid=(l+r)>>1; if(qpos<=mid)modify(ls,l,mid,qpos); else modify(rs,mid+1,r,qpos); pushup(pos); } void cal(int pos,int l,int r){ if(l==r){ans[l]=(t[pos].x%2+2)%2;/*cout<<ans[l]<<" ";*/return;} pushdown(pos,l,r); int mid=(l+r)>>1; cal(ls,l,mid);cal(rs,mid+1,r); } signed main(){ scanf("%lld",&id);//cout<<id<<endl; scanf("%lld%lld%lld",&n,&q,&K);//cout<<n<<" "<<q<<" "<<K<<endl; init(1,1,n); while(q--){ // cout<<q<<endl; cin>>op;//cout<<(char)op<<endl; if(op=='+'||op=='-'||op=='*'){ scanf("%lld%lld%lld",&l,&r,&w); // cout<<l<<" "<<r<<" "<<w<<endl; if(op=='+'){update(1,1,n,l,r,w);/*cal(1,1,n);cout<<"?"<<endl;*/} if(op=='-'){update(1,1,n,l,r,-w);/*cal(1,1,n);cout<<">"<<endl;*/} if(op=='*'){update1(1,1,n,l,r,w);/*cal(1,1,n);cout<<"/"<<endl;*/} } else{ // cout<<"??????????????????????"<<endl; scanf("%lld%lld",&l,&r);//cout<<l<<" "<<r<<endl; for(int i=l;i<=r;i++){modify(1,1,n,i);cal(1,1,n);} } } cal(1,1,n);//cout<<endl; for(int i=1;i<=n;i++){printf("%lld ",ans[i]);}printf("\n"); fclose(stdin);fclose(stdout); return 0; }