题解:ABCD - All Assign Point Add
·题目
链接:Atcoder。
链接:洛谷。
·难度
算法难度:C。
思维难度:B。
调码难度:C。
综合评价:普及/提高-。
·算法
模拟
·思路
用两个数组a、c分别维护当前项比最初整体赋的值大多少、整体赋值是第几次,通过维护这两个数组即可求得答案。
·代价
O(n+q)。
·细节
具体操作:用t维护整体赋值的次数,x维护整体赋的值,每次操作1时t要加1,操作2更新a、c,操作3若对应的c等于t输出x加上对应的a,否则输出x。文章来源:https://www.toymoban.com/news/detail-670168.html
·代码
#include<bits/stdc++.h>
#define N 220000
using namespace std;
long long a[N]={},c[N]={},n=0,q=0,t=0,x=0;
int main(){
scanf("%lld",&n);
for(long long i=1;i<=n;i++){
scanf("%lld",&a[i]);
}
scanf("%lld",&q);
for(long long i=1;i<=q;i++){
long long o=0;
scanf("%lld",&o);
if(o==1){
scanf("%lld",&x);
t++;
}else{
if(o==2){
long long y=0,z=0;
scanf("%lld%lld",&y,&z);
if(c[y]!=t){
c[y]=t;
a[y]=z;
}else{
a[y]+=z;
}
}else{
long long m=0;
scanf("%lld",&m);
if(c[m]!=t){
printf("%lld\n",x);
}else{
printf("%lld\n",x+a[m]);
}
}
}
}
return 0;
}
·注意
注意操作2是累加,不是赋值。文章来源地址https://www.toymoban.com/news/detail-670168.html
到了这里,关于题解:ABCD - All Assign Point Add的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!