Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
30777 | hi_hi | 【S】T2 | C++ | 解答错误 | 0 | 3077 MS | 3384 KB | 1368 | 2024-07-30 14:21:33 |
#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; }