先看题目描述,总结起来就是:

1. 区间修改

2. 单点查询

于是:

标准的线段树、树状数组题目。

墙裂推荐树状数组~~(只要能用)~~,码量小,空间和时间都比线段树优

所以,这里只讲树状数组

这里的树状数组采用了差分和前缀和的思想,利用树状数组维护差分数组的前缀和(不懂树状数组的出门左转这里话说会树状数组的还看题解干嘛

久违的放代码时间:

#include<iostream>
using namespace std;
int n,m;
long long c[100000005];
inline int lowbit(int x){return x&(-x);}//树状数组的标志
void add(int x,int t){//单点加(为什么要t看后面)
	while(x<=n){
		c[x]+=t;
		x+=lowbit(x);
	}
}
long long sum(int x){//求和
	long long ret=0;
	while(x>0){
		ret+=c[x];
		x-=lowbit(x);
	}
	return ret;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>n>>m;
	int opt,x,y;
	for(int i=0;i<m;i++){
		cin>>opt;
		if(!opt){
			cin>>x>>y;
			add(x,1);
			add(y+1,-1);//差分,用到上面的t了~
		}
		else{
			cin>>x;
			cout<<sum(x)<<endl;
		}
	}
	return 0;
}//完结撒花!