Pikachu(差分)

博客围绕计算n幢房子内皮卡丘个数的问题展开,有两种操作,一是在[l,r]区间房子塞皮卡丘,二是重复第l到第r次操作。给出输入输出格式及样例,还介绍可通过维护两个差分数组求解,最后对差分数组求前缀和。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2111: Pikachu
时间限制: 1 Sec 内存限制: 128 MB
提交: 145 解决: 41
[提交] [状态] [讨论版] [命题人:admin]
题目描述

采蘑菇的小西佬去看了皮卡丘大侦探,然后他深深的喜欢上了皮卡丘,现在他想让你数一数n幢房子内的皮卡丘的个数。
但是小西佬突然觉得太简单了,他稍微增加了难度。现在有两种操作: 第一种操作对[l,r]区间内每幢房子塞入一个皮卡丘; 第二种操作对第l次到第r次的操作重复一遍。
问依次进行m次操作后每幢房子内皮卡丘的个数。数据保证l < r 且对于第二种操作所给区间一定是之前的操作,对于第一种操作r一定<=n。初始房子为空。

输入

T<=50组数据,n<=100000, m <= 100000。 依次输入一个T,n,m,然后m行操作。每行3个数字,分别为id,l,r(id为1则为第一种操作,否则为第二种操作)

输出

依次输出1到n幢房子内的皮卡丘个数,答案对1 000 000 007取模(行末没有多余空格)

样例输入

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

样例输出

2
7 7 0 7 7

提示

样例解释:
第二组数据,第一次操作结束后[1,1,0,0,0],第二次操作后[1,1,0,1,1],第三次操作后[2,2,0,2,2],第四次操作后[4,4,0,4,4],第五次操作后[7,7,0,7,7]
浙江理工大学月赛2019年5月

可以 O(1)维护两个差分数组,一个是针对重复操作的差分数组,一个是针对当前房子塞入皮卡丘的个数的差分数组。对第二个差分数组的每次修改的大小是当前操作重复操作次数。 因为每一次第二种操作总是针对之前的操作,所以要倒着跑一遍。 最后对针对当前房子塞入皮卡丘的个数的差分数组求个前缀和就好了。

#include<bits/stdc++.h>
#define fi first
#define se second
#define log2(a) log(n)/log(2)
#define show(a) cout<<a<<endl;
#define show2(a,b) cout<<a<<" "<<b<<endl;
#define show3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl;
using namespace std;

typedef long long ll;
typedef pair<int, int> P;
typedef pair<P, int> LP;
const ll inf = 1e17 + 10;
const int N = 1e6 + 10;
const ll mod = 1e9+7;
const int base=131;
const double pi=acos(-1);
map<string, int>ml;


int t,n,m;
int num[N],pre[N];
int op[N],l[N],r[N];
int main()
{
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&n,&m);
		memset(num,0,sizeof num);
		memset(pre,0,sizeof pre);
		pre[m+1]=1;
		pre[0]--;
		for(int i=1;i<=m;i++)
		{
			scanf("%d%d%d",&op[i],&l[i],&r[i]);
		}
		for(int i=m;i>=1;i--)
		{
			pre[i]=(pre[i]+pre[i+1])%mod;
			if(op[i]==1)
			{
				num[l[i]]=(num[l[i]]+pre[i])%mod;
				num[r[i]+1]=(num[r[i]+1]-pre[i]+mod)%mod;
			}
			else
			{
				pre[r[i]]=(pre[r[i]]+pre[i])%mod;
				pre[l[i]-1]=(pre[l[i]-1]-pre[i]+mod)%mod;
			}
		}
		for(int i=1;i<=n;i++)
		{
			num[i]=(num[i]+num[i-1])%mod;
			printf("%d%c",num[i],i!=n?' ':'\n');
		}
	}

}

03-19
<think>好的,用户想查找与“皮卡丘”相关的信息,但提供的引用内容都是关于Pikachu靶场,也就是一个网络安全练习平台。首先,我需要确认用户是否混淆了“皮卡丘”(Pokémon中的角色)和“Pikachu靶场”。根据引用内容,用户提到的Pikachu靶场是一个包含Web安全漏洞的测试平台,用于渗透测试学习。 接下来,我需要检查用户提供的引用内容。引用1、2、3都详细描述了Pikachu靶场的功能、安装方法以及使用场景。例如,引用1提到它是一个漏洞测试练习平台,引用3说明它使用PHP开发并通过Docker安装。用户可能误以为“皮卡丘”指的是这个安全平台,而非宝可梦角色。 因此,我应该首先明确回答Pikachu靶场的信息,包括其用途、安装教程和常见漏洞类型。同时,考虑到用户可能存在的混淆,需要礼貌地询问是否指宝可梦的皮卡丘,并提供相应帮助。 在生成相关问题部分,需要围绕Pikachu靶场的特点、安装、漏洞类型、与DVWA的区别以及学习资源展开,确保问题覆盖用户可能感兴趣的方面。同时,保持回答结构清晰,分点说明,并正确引用提供的资料。</think>您提到的“Pikachu”可能指向两个不同方向的信息,根据提供的引用内容判断,主要涉及网络安全领域的Pikachu漏洞靶场。以下是详细信息: ### 一、Pikachu漏洞靶场说明 1. **平台定位** Pikachu是一个专为Web安全测试设计的漏洞演练平台,包含SQL注入、XSS、SSRF、文件上传等常见Web漏洞模块,适合渗透测试学习者进行实战训练[^1][^3]。 2. **核心功能特性** - 提供$20+$种Web漏洞场景,如: $$ \text{SSRF漏洞路径: /vul/ssrf/ssrf\_curl.php} $$ $$ \text{文件包含漏洞路径: /vul/fileinclude/fi\_local.php?filename=file1.php} $$ - 每个漏洞点附带原理说明和验证方法[^2] 3. **安装方式** - Docker快速部署(推荐): ```bash docker pull area39/pikachu docker run -d -p 8080:80 area39/pikachu ``` - 手动安装需配置PHP+MySQL环境 ### 二、其他可能性确认 若您指的是《宝可梦》中的角色"皮卡丘",该信息不在当前引用范围内。需要其他资料可补充说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值