P4939 Agent2

题目背景

炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的。每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了。只有不咕鸟Lyn_king一个人冒着太阳等了半个多小时,然后居然看到连ENLIGHTENED行动参谋咕咕咕了,果然咕咕咕是人类的本性啊。

题目描述

作为一个ENLIGHTENED行动指挥,自然不想看到这一点,于是他偷取到了那些经常咕咕咕Agent的在下来NN天的活动安排表,并且叫上了你来整理。在整理过程中,ENLIGHTENED行动指挥对你说了MM条命令,命令操作如下。

  1. 输入0,a,b0,a,b,这代表在第aa天到第bb天,有一名Agent要咕咕咕。
  2. 输入1aa,这代表ENLIGHTENED行动指挥询问你根据目前的信息,在第aa天有多少名Agent会咕咕咕。

作为同是不咕鸟的你,也想要惩戒那些经常咕咕咕的人,所以,请协助完成ENLIGHTENED行动指挥完成整理,并且在他每次询问时,输出正确的答案。

输入输出格式

输入格式:

第一行输入两个整数输N,MN,M, 下来MM行,每行输入一个命令,命令格式见题目描述。

输出格式:

对于每一次询问的操作,都要输出询问的答案。答案之间用换行隔开。

输入输出样例

输入样例#1:  复制
5 5
0 1 2
0 1 5
1 1
0 3 5
1 5
输出样例#1:  复制
2
2

说明

对于20\%20%的数据 N,M \leq 10N,M10

对于40\%40%的数据 N,M \leq 10^3N,M103

对于60\%60%的数据 N,M \leq 10^5N,M105

对于100\%100%的数据 1 \leq a,b \leq N \leq 10^7,M \leq 4*10^51a,bN107,M4105

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
using namespace std;
int n,m,a,xx,yy,tt;
int c[10000000],tree[10000000];
int lowbit(int t){
	return t&(-t);
}
int getsum(int x){
	int ans=0;
	for(int i=x;i;i-=lowbit(i)){
		ans+=c[i];
	}
	return ans;
}
void add(int x,int y){
	for(int i=x;i<=n;i+=lowbit(i)){
		c[i]+=y;
	}
}
int main(){
	scanf("%d%d",&n,&m);
	while(m--){
		scanf("%d",&a);
		if(a==0){
			scanf("%d%d",&xx,&yy);
			add(xx,1);
			add(yy+1,-1);
		}
		if(a==1){
			scanf("%d",&yy);
			printf("%d\n",getsum(yy)+tree[yy]);
		}
	}
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/xiongchongwen/p/11200307.html
P2P