#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,m,k,op,x;
const int N = 200010;
int a[N],b[N];
int main()
{
cin >> n>> m>> k;
for(int i = 1;i <= m;i++)
{
scanf("%d %d",&op,&x);
if(op == 1)
{
if(a[x] != 0)
{
if(i - a[x] >= k) b[x] += k; //如果第i天减去被施法那天的树大于持续的时间,曾长的长度等于k
else b[x] += i - a[x]; //如果小于增长的长度等于第i天减去被施法那天的树
}
a[x] = i; //第 x 个树在第i天被施法
}
else if(op == 2)
{
if(i - a[x] >= k)b[x] += k;
else b[x] += i - a[x];
a[x] = 0;
}
else if(op==3)
{
sum = b[x] + i - 1;
if(a[x] != 0)
{
if(i - a[x] >= k) sum += k;
else sum += i - a[x];
}
printf("%d\n",sum);
}
}
return 0;
}
为什么没有通过,是哪个点没有考虑到吗,其他思路提供代码也行
if(a[x] != 0) --- 数组a并没有进行初始化啊。改为int a[N] = {0},b[N] = {0};