专栏文章
Sum of Min Query题解
AT_abc420_c题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio5a3fx
- 此快照首次捕获于
- 2025/12/02 13:35 3 个月前
- 此快照最后确认于
- 2025/12/02 13:35 3 个月前
题目大意
给定数组 ,并进行 次操作。
对于每次操作,若第一个值为
A 则将 替换为 。反之将 替换为 。
并统计,对于每一次操作的值。
解题思路
首先计算一下时间预期复杂度~~(内存 1 GB,根本不带怕)~~
若每次循环时都要遍历一遍 ,则时间复杂度为
O(nq) 。该方法遍历次数为 ,约为 次,铁定超时。
于是我们要思考另一种办法。
考虑到每一次操作只会改变一个值,因此我们只需要定义一个
Res ,输入时累加初值,并在每一次操作中更新他并输出即可,时间复杂度为 O(n+q) 。其中 的复杂度在于输入,而 的复杂度在于查询、更新与输出。参考代码
附上参考代码
CPP#include<bits/stdc++.h>
using namespace std;
long long n,q,a[200010],b[200010],v[200010],Res;
int main()
{
scanf("%lld%lld",&n,&q);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=n;i++)
scanf("%lld",&b[i]),
Res+=min(a[i],b[i]);
while(q--)
{
char c;
long long x,y;
cin>>c>>x>>y;
long long qq=min(a[x],b[x]);
if(c=='A')
a[x]=y;
else
b[x]=y;
Res-=qq-min(a[x],b[x]);
printf("%lld\n",Res);
}
return 0;
}
最后提醒一句,十年OI一场空,不开long long见祖宗
至少我在考场上见祖宗了


相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...