洛谷 U41571 Agent2
阅读原文时间:2023年07月11日阅读:1

U41571 Agent2

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

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

  1. 输入$0​$ $a​$ $b​$,这代表在第$a​$天到第$b​$天,有一名Agent要咕咕咕。
  2. 输入11 aa,这代表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,M≤10

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

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

对于100\%100%的数据 1 \leq a,b \leq N \leq 10^7,M \leq 4*10^51≤a,b≤N≤107,M≤4∗105

/*第一思路:线段树,数据范围是1e7感觉要mle,或许可以用树状数组搞一下
第二思路:前缀和维护差分序列,但最多支持10次询问,感觉也要gg*/
#include
#include
#include
#include
using namespace std;
int n,m;
int tree[],num[];
int lowbit(int t){
return t&(-t);
}
void change(int x,int opt){
for(int i=x;i<=n;i+=lowbit(i)) tree[i]+=opt; } int query(int x){ int bns=; for(int i=x;i>;i-=lowbit(i))
bns+=tree[i];
return bns;
}
int main(){
scanf("%d%d",&n,&m);
/*思路二 45分*/
/*for(int i=1;i<=m;i++){
int opt;scanf("%d",&opt);
if(opt==0){
int x,y;
scanf("%d%d",&x,&y);
num[x]+=1;num[y+1]-=1;
}
else if(opt==1){
int x;scanf("%d",&x);
for(int i=1;i<=x;i++)
sum[i]=sum[i-1]+num[i];
cout<<sum[x]<<endl;
}
}*/
/*思路一 100*/
for(int i=;i<=m;i++){
int opt;scanf("%d",&opt);
if(opt==){
int x,y;scanf("%d%d",&x,&y);
change(x,);
change(y+,-);
}
else if(opt==){
int x;scanf("%d",&x);
cout<<query(x)<<endl;
}
}

}

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章