luogu P2184 贪婪大陆

题目传送门: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");
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值