列表

详情


NC16410. 托米搭积木

描述

小托米真的很可爱呀(>_<)
这天,可爱的小托米得到了n堆积木,且第i堆积木初始时有ai块积木.
小托米很快就喜欢上了玩积木.
他会作出三种操作:
1.把第v堆的积木数量更改为x.
2.在每堆积木的上面都加上y个积木.
3.数第q堆积木的积木个数.
由于这天可爱的小托米实在是太困了,所以他请你帮他完成这些操作.

输入描述

第一行两个整数n,m.
第二行n个整数,第i个整数代表ai的值.
接下来m行,每行代表一个操作:
第一个整数t代表操作的类型
若t=1,则接下来两个整数v,x,代表操作1.
若t=2,则接下来一个整数y,代表操作2.
若t=3,则接下来一个整数q,代表操作3.

输出描述

对于每个操作3,输出其对应的答案.

示例1

输入:

10 11
1 2 3 4 5 6 7 8 9 10
3 2
3 9
2 10
3 1
3 10
1 1 10
2 10
2 10
3 1
3 10
3 9

输出:

2
9
11
20
30
40
39

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3(3.5.2) 解法, 执行用时: 1113ms, 内存消耗: 14444K, 提交时间: 2018-06-05 20:02:28

[n, m] = [int(x) for x in input().split()]
delta = 0
cur = [int(x) for x in input().split()]
for i in range(m):
    a = [int(x) for x in input().split()]
    if a[0] == 1:
        cur[a[1] - 1] = a[2] - delta
    elif a[0] == 2:
        delta += a[1]
    else:
        print(cur[a[1] - 1] + delta)

C++11(clang++ 3.9) 解法, 执行用时: 217ms, 内存消耗: 1252K, 提交时间: 2018-06-01 21:18:44

#include<bits/stdc++.h>
using namespace std;
int n,i,j,k,l,m,a[1000005],v,g=0,t;
long long x,y;
int main()
{cin>>n>>m;
for(i=1;i<=n;i++)
{cin>>a[i];
}
while(m--)
{cin>>k;
if(k==1)
{cin>>v>>x;
a[v]=x-g;
}
else if(k==2)
{cin>>y;
g+=y;
}
else
{cin>>y;
cout<<a[y]+g<<"\n";
}
}
}

上一题