提交时间:2024-07-30 14:21:33
运行 ID: 30777
#include <bits/stdc++.h> #define int long long using namespace std; int n,m; int father[200001],pain[200001]; int yl[200001]; signed main(){ scanf("%lld%lld",&n,&m); bool bk=0; bool bt=0; for (int i=2;i<=n;i++){ scanf("%lld",&father[i]); if (father[i]!=i-1) bk=1; if (father[i]!=1) bt=1; } if (bk==0){ while (m--){ int opt; scanf("%lld",&opt); if (opt==1){ int x,a,b; scanf("%lld%lld%lld",&x,&a,&b); for (int i=x+1;i<=n;i++){ if ((i-x)%2==1){ pain[i]-=(a+b*(i-x)); pain[i]%=1000000007; } else{ pain[i]+=(a+b*(i-x)); pain[i]%=1000000007; } } } else if (opt==2){ int x; scanf("%lld",&x); printf("%lld\n",pain[x]); } else{ int x; scanf("%lld",&x); for (int i=x;i<=n;i++){ pain[i]=0; } } } } else if (bt==0){ while (m--){ int opt; scanf("%lld",&opt); if (opt==1){ int x,a,b; scanf("%lld%lld%lld",&x,&a,&b); if (x==1){ for (int i=2;i<=n;i++){ pain[i]-=(a+b); pain[i]%=1000000007; } } } else if (opt==2){ int x; cin>>x; printf("%lld\n",pain[x]); } else{ int x; cin>>x; for (int i=x;i<=n;i++){ pain[i]=0; } } } } else{ printf("998244353\n"); } return 0; }