MLE!?
查看原帖
MLE!?
638059
jason_jason楼主2023/1/13 10:38
#include <bits/stdc++.h>
using namespace std;
int w[800001],a[200001],n,m;
void pushup(int u)
{
   w[u]=w[2*u]+w[2*u+1];
}
void build(int u,int l,int r)
{
   if(l==r)
   {
   	w[u]=a[l];
   	return ;
   }
   int mid=(l+r)/2;
   build(2*u,l,mid);
   build(2*u+1,mid+1,r);
   pushup(u);
}
int query1(int u,int l,int r,int p)
{
   if(l==r) return w[u];
   int mid=(l+r)/2;
   if(p<=mid) return query1(2*u,l,mid,p);
   else return query1(2*u+1,mid+1,r,p);
}
void upd1(int u,int l,int r,int p,int x)
{
   if(l==r)
   {
   	w[u]+=x;
   	return ;
   }
   int mid=(l+r)/2;
   if(p<=mid) return upd1(2*u,l,mid,p,x);
   else return upd1(2*u+1,mid+1,r,p,x);
   pushup(u);
}
bool in(int L,int R,int l,int r)
{
   return (L<=l) && (R<=r) ;
}
bool ou(int L,int R,int l,int r)
{
   return (r<L) || (R<l) ;
}
int query(int u,int L,int R,int l,int r)
{
   if(in(L,R,l,r)) return w[u];
   else if(!ou(L,R,l,r))
   {
   	int mid=(L+R)/2;
   	return query(2*u,L,mid,l,r)+query(2*u+1,mid+1,R,l,r);
   }
   else return 0;
}
int main()
{
   cin>>n>>m;
   for(int i=1;i<=n;i++) cin>>a[i];
   build(1,1,n);
   int op;
   int x,y;
   while(m--)
   {
   	cin>>op>>x>>y;
   	if(op==1) upd1(1,1,n,x,y);
   	else cout<<query(1,1,n,x,y)<<endl;
   }
   return 0;
} 

**

2023/1/13 10:38
加载中...