没搞懂这俩代码的差别
我的代码:
#include<bits/stdc++.h>
using namespace std;
int n;
struct data{
long long d,ch;
}a[200005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].d;
int t,change=0;
cin>>t;
while(t--)
{
int op,x,k;
cin>>op>>x;
if(op==1)change=x;
if(a[x].ch!=change)
{
a[x].ch=change;
a[x].d=change;
}
if(op==2)
{
cin>>k;
a[x].d+=k;
}
if(op==3)cout<<a[x].d<<endl;
}
return 0;
}
会RE
换一下位置后就AC了
#include<bits/stdc++.h>
using namespace std;
int n;
struct data{
long long d,ch; //ch为是否已经进行了op1
}a[2000005];
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i].d;
int t,change=0;
cin>>t;
while(t--)
{
int op,x,k;
cin>>op>>x;
if(op==1)change=x;
if(op==2)
{
cin>>k;
if(a[x].ch!=change)
{
a[x].ch=change;
a[x].d=change+k;
}
else a[x].d+=k;
}
if(op==3)
{
if(a[x].ch!=change)
{
a[x].ch=change;
a[x].d=change;
}
cout<<a[x].d<<endl;
}
}
return 0;
}