题目传送门:233333
本题由萌萌哒的我的同桌推荐(woc为毛bzoj自爆了
)
询问区间[L,R],就是求出L点此时的地雷数+[L+1,R]中新加的地雷数
L点地雷数=[1,L]的左端点数减去[1,L-1]的右端点数
[L+1,R]中新加的地雷数=[L+1,R]的左端点数
所以询问[L,R]就是[1,R]的左端点数-[1,L-1]的右端点数
非要打线段树也不是不可以(就像我萌萌哒的同桌
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define rep(j,k,l) for (int j=k;j<=l;j++)
#define N 100000
using namespace std;
int n,T,a[4*N],b[4*N];
int main(){
scanf("%d%d",&n,&T);
while (T--){
int m,x,y;
scanf("%d%d%d",&m,&x,&y);
if (m==1){
while (x<=n){
a[x]+=1;x+=x&(-x);
}
while (y<=n){
b[y]+=1;y+=y&(-y);
}
}
else{
int ans=0;x--;
while (x>0){
ans-=b[x];x-=x&(-x);
}
while (y>0){
ans+=a[y];y-=y&(-y);
}
printf("%d\n",ans);
}
}
system("pause");
}