Sum of Min Query题解
wenzhenhao · · 题解
题目大意
给定数组
对于每次操作,若第一个值为
反之将
并统计,对于每一次操作
解题思路
首先计算一下时间预期复杂度(内存 1 GB,根本不带怕)
若每次循环时都要遍历一遍 O(nq) 。
该方法遍历次数为
于是我们要思考另一种办法。
考虑到每一次操作只会改变一个值,因此我们只需要定义一个
参考代码
附上参考代码
#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见祖宗
至少我在考场上见祖宗了