樱洛CHANGE @ 2021-09-07 16:09:14
我的代码:(动态开点权值线段树)
const int N=1e6+5,M=1e9+5;
int n,m,a[N];
class SegmentTree{
private:
int cnt;
class Node{
public:
int ls,rs,val;
ll sum;
Node():ls(0),rs(0),val(0),sum(0){}
}t[N*5];
#define mid (l+((r-l)>>1))
inline void Pushup(rint p){
t[p].val=t[t[p].ls].val+t[t[p].rs].val;
t[p].sum=t[t[p].ls].sum+t[t[p].rs].sum;
}
public:
int root;
SegmentTree():cnt(0),root(0){}
inline void Change(rint &p,rint l,rint r,rint pos,rint k){
if(l>pos||r<pos) return ;
if(!p) p=++cnt;
if(l==r) return t[p].val+=k,t[p].sum+=(ll)pos*k,void();
Change(t[p].ls,l,mid,pos,k),Change(t[p].rs,mid+1,r,pos,k),Pushup(p);
}
inline int Asknum(rint p,rint l,rint r,rint x,rint y){
if(l>y||r<x||!p) return 0;
if(l>=x&&r<=y) return t[p].val;
return Asknum(t[p].ls,l,mid,x,y)+Asknum(t[p].rs,mid+1,r,x,y);
}
inline ll Asksum(rint p,rint l,rint r,rint x,rint y){
if(l>y||r<x||!p) return 0ll;
if(l>=x&&r<=y) return t[p].sum;
return Asksum(t[p].ls,l,mid,x,y)+Asksum(t[p].rs,mid+1,r,x,y);
}
}t;
内存占用极其之大,卡了内存才过的。
同学的代码:(也是动态开点权值线段树)
#define int long long
#define mid ((l+r)>>1)
using namespace std;
int n,m,s[10000001];
int L[10000001],R[10000001],siz[10000001],val[10000001],tot=1,rt=1;
void push_up(int x)
{
siz[x]=siz[L[x]]+siz[R[x]];
val[x]=val[L[x]]+val[R[x]];
}
void add(int &x,int l,int r,int to,int v)
{
if(r<to||l>to)return ;
if(x==0)x=++tot;
if(l==r)
{
siz[x]+=v;
val[x]+=l*v;
return ;
}
add(L[x],l,mid,to,v);
add(R[x],mid+1,r,to,v);
push_up(x);
}
int query(int x,int l,int r,int v)
{
if(r<=v)return 0;
if(l>v)return siz[x];
if(!x)return 0;
return query(L[x],l,mid,v)+query(R[x],mid+1,r,v);
}
int query_(int x,int l,int r,int v)
{
if(r<=v)return val[x];
if(l>v)return 0;
if(!x)return 0;
return query_(L[x],l,mid,v)+query_(R[x],mid+1,r,v);
}
内存占用极小,甚至define int long long
这是为什么,有没有大佬能解释一下
by HerikoDeltana @ 2021-09-07 16:11:22
洛谷上的内存是实际使用罢(?)
by 樱洛CHANGE @ 2021-09-07 16:13:15
@HerikoDeltana 那我也没用那么多啊。。。动态开点啊qwq
by 樱洛CHANGE @ 2021-09-07 16:13:55
@HerikoDeltana u1s1下面的代码是神brAKzero的,您可以看看我提交记录那个内存占用就离谱
by 樱洛CHANGE @ 2021-09-07 16:17:06
@HerikoDeltana /kel/kk/kk
by KEBrantily @ 2021-09-07 16:45:09
只能说是因为神 brAKzero 太强了。
by 樱洛CHANGE @ 2021-09-07 16:47:44
@KnightL 不是啊,题解有一个写权值线段树的,跟我写的基本一模一样,就是没封装,也内存贼小,我把封装删了,内存还是巨大。。。
by KEBrantily @ 2021-09-07 16:56:13
@樱洛CHANGE 我写的用了 19mb(
by logfk @ 2021-09-07 16:57:26
巧了我也 define int long long (
by logfk @ 2021-09-07 16:58:06
哦我写的树状数组啊那没事了(
by 樱洛CHANGE @ 2021-09-07 17:11:09
@KnightL /kel,所以到底为什么啊/kk