打卡信奥刷题(2559)用C++实现信奥 P2184 贪婪大陆
2026/4/29 16:05:55 网站建设 项目流程

P2184 贪婪大陆

题目背景

面对蚂蚁们的疯狂进攻,小 FF 的 Tower defence 宣告失败……人类被蚂蚁们逼到了 Greed Island 上的一个海湾。现在,小 FF 的后方是一望无际的大海,前方是变异了的超级蚂蚁。小 FF 还有大好前程,他可不想命丧于此, 于是他派遣手下最后一批改造 SCV 布置地雷以阻挡蚂蚁们的进攻。

题目描述

小 FF 最后一道防线是一条长度为nnn的战壕,小 FF 拥有无数多种地雷,而 SCV 每次可以在[L,R][L, R][L,R]区间埋放同一种不同于之前已经埋放的地雷。由于情况已经十万火急,小 FF 在某些时候可能会询问你在[L′,R′][L',R'][L,R]区间内有多少种不同的地雷,他希望你能尽快的给予答复。

输入格式

第一行为两个整数nnnmmmnnn表示防线长度,mmm表示 SCV 布雷次数及小 FF 询问的次数总和。

接下来有mmm行,每行三个整数q,l,rq,l,rq,l,r

  • q=1q=1q=1,则表示 SCV 在[l,r][l, r][l,r]这段区间布上一种地雷;
  • q=2q=2q=2,则表示小 FF 询问当前[l,r][l, r][l,r]区间总共有多少种地雷。

输出格式

对于小 FF 的每次询问,输出一个答案(单独一行),表示当前区间地雷种数。

输入输出样例 #1

输入 #1

5 4 1 1 3 2 2 5 1 2 4 2 3 5

输出 #1

1 2

说明/提示

数据规模与约定

  • 对于30%30\%30%的数据,0≤n0 \le n0nm≤1000m \le 1000m1000
  • 对于100%100\%100%的数据,0≤n0 \le n0nm≤105m \le 10^5m105

C++实现

#include<bits/stdc++.h>usingnamespacestd;intn,m;constintN=1e5+10;intt[2][N];//0开头 1结尾voidadd(intx,intpos){while(x<=n){t[pos][x]++;x+=x&(-x);}}intsum(intx,intpos){intans=0;while(x){ans+=t[pos][x];x-=x&(-x);}returnans;}intmain(){scanf("%d %d",&n,&m);while(m--){intopt,l,r;scanf("%d %d %d",&opt,&l,&r);if(opt==1){add(l,0);add(r,1);}else{intrans=sum(r,0)-sum(l-1,1);printf("%d\n",rans);}}return0;}

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询