并查集
int f[M];
void Init{
for(int i=1;i<=n;i++)
f[i]=i;
}
int fd(int x){//库里有find函数,为保险起见不用全拼
return f[x]==x?x:f[x]=fd(f[x]);
}
树状数组
void updata(int loc,int value){
for(int i=loc;i<=MX;i+=i&(-i))//MX为最大下标
C[i]+=value;
}
int query(int loc){
int ans=0;
for(int i=loc;i>0;i-=i&(-i))
ans+=C[i];
return ans;
}
前向星
int t=1;//memset(head,-1,sizeof(head));
struct edge{
int from,to,next,val;
}e[M];
void add(int i,int j,int w)
{
e[t].from=i;
e[t].to=j;
e[t].val=w;
e[t].next=head[i];
head[i]=t++;
}
前缀和
for(int i=1;i<=n;i++)
{
scanf("%d%d",&x,&y);
sum[x]++,sum[y+1]--;//区间修改
}
for(int i=1;i<=n;i++)
sum[i]+=sum[i-1];
cout<<sum[b]-sum[a-1];
二维
sum[x1][y1]+1,sum[x2+1][y1]-1,sum[x1][y2+1]-1,sum[x2+1][y2+1]+1;
sum[x2][y2]-sum[x1-1][y2]-sum[x2][y2-1]+sum[x1][y1];