贪婪大陆

题目链接:贪婪大陆


显然因为每一次放的地雷都是不同的。

所以我们把地雷看成线段,就是多少个线段与当前区间没有交集,用两个fenwick维护即可。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include
//#define int long long
using namespace std;
const int N=1e5+10;
int n,m,cnt;
struct fenwick{
     
	int d[N];
	inline void insert(int x){
     for(;x<=n;x+=x&(-x)) d[x]++;}
	inline int ask(int x){
     int s=0; for(;x;x-=x&(-x)) s+=d[x]; return s;}
}d1,d2;
signed main(){
     
	cin>>n>>m;
	for(int i=1,op,l,r;i<=m;i++){
     
		scanf("%d %d %d",&op,&l,&r);
		if(op==1)	d1.insert(l),d2.insert(r),cnt++;
		else printf("%d\n",cnt-d2.ask(l-1)-(d1.ask(n)-d1.ask(r)));
	}
	return 0;
}

你可能感兴趣的:(树状数组)