C++算法问题-(时间问题)

img

img

#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};