Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
37781 baka24 【S】T3 C++ 运行超时 45 2000 MS 59700 KB 2839 2025-05-11 12:50:30

Tests(9/20):


#include<bits/stdc++.h> using namespace std; #define int long long #define lb(x) (x&(-x)) #define pb push_back int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} const int MAXN=600010,Mod=998244353; int Pow(int x,int y){int rt=1;while(y){if(y&1)rt=rt*x%Mod;x=x*x%Mod;y>>=1;}return rt;} void add(int &x,int y){x+=y;if(x>=Mod)x-=Mod;if(x<0)x+=Mod;} int n,m,ans; struct node{ int a,x,lza,lzv; }; struct TA{ node t[MAXN]; int siz[MAXN]; vector<int>G[MAXN]; void build(){ for(int i=1;i<n;i++)if(i+lb(i)<=n)G[i+lb(i)].pb(i),siz[i]+=lb(i),siz[i+lb(i)]+=siz[i]; } void upd(int pos,int x,int y){ add(t[pos].x,x); add(t[pos].a,(x*lb(pos)+y*(siz[pos]-lb(pos)))%Mod); add(t[pos].lza,(x+y)%Mod); add(t[pos].lzv,y); } void pushdown(int pos){ for(auto o:G[pos])upd(o,t[pos].lza,t[pos].lzv); t[pos].lza=t[pos].lzv=0; } void pushup(int pos){ t[pos].a=t[pos].x; for(auto o:G[pos])add(t[pos].a,t[o].a); } int query(int pos,int x){ if(pos<=x)return t[pos].a; if(pos-lb(pos)+1>x)return 0; pushdown(pos); int res=0; for(auto o:G[pos])add(res,query(o,x)); return res; } void update(int pos,int x,int y){ if(pos<=x){ upd(pos,y,y); return; } if(pos-lb(pos)+1>x)return; pushdown(pos); for(auto o:G[pos])update(o,x,y); pushup(pos); } }T; int c[MAXN]; struct TreeArray{ int C[MAXN]; void upd(int x,int y){int res;for(int i=x;i<=n;i+=lb(i))add(C[i],y);} int qry(int x){int res=0;for(int i=x;i>=1;i-=lb(i))add(res,C[i]);return res;} void upd(int l,int r,int x){upd(l,x),upd(r+1,Mod-x);} int qry(int l,int r){ int res=0; for(int i=l;i<=r;i++)add(res,qry(i)); return res; } }T2; void slv0(){ for(int i=1;i<=n;i++)c[i]=1; while(m--){ int op=read(),l=read(),r=read(),x=op!=2?read()%Mod:0; if(op==1)for(int i=l;i<=r;i++)add(c[i],x); if(op==2)printf("%lld\n",T2.qry(l,r)); if(op==3)for(int i=l;i<=r;i++)T2.upd(i-lb(i)+1,i,c[i]*x%Mod); } } void slv1(){ T.build(); while(m--){ int op=read(),l=read(),r=read(),x=op!=2?read():0; if(op==2)printf("%lld\n",((T.query(n,r)-T.query(n,l-1))%Mod+Mod)%Mod); else T.update(n,r,x),T.update(n,l-1,-x); } } void slv(){ m=read(); n=1; while(n<m)n<<=1; m=read(); if(n<=5000&&m<=5000)slv0();else slv1(); } signed main(){ // freopen("bit.in","r",stdin);freopen("bit.out","w",stdout); // int _=read();while(_--) slv(); return 0; }


测评信息: