单双数增加
Description
给定一个长度为
n
n
n的数列,有
q
q
q次操作,问每次执行完操作后数列的总和。
共有两种操作:
0
x
\texttt{0\space x}
0 x,给所有偶数加上
x
x
x;
1
x
\texttt{1\space x}
1 x,给所有奇数加上
x
x
x;
Format
Input
第一行包含两个整数
n
n
n和
q
q
q ——数组
a
a
a的长度和查询的数量。
第二行正好包含
n
n
n的整数:
a
1
,
a
2
,
…
,
a
n
a_1,a_2,\ldots,a_n
a1,a2,…,an——数组
a
a
a的元素。
下面的
q
q
q行包含两个整数
t
y
p
e
j
type_j
typej和
x
j
x_j
xj
(
0
≤
t
y
p
e
j
≤
1
,
1
≤
x
j
≤
1
0
4
)
(0 \leq type_j \leq 1, 1 \leq x_j \leq 10^4)
(0≤typej≤1,1≤xj≤104)的查询。
Output
打印 q q q行:处理查询后数组 a a a的元素之和。
Samples
输入数据 1
6 7
1 3 2 4 10 48
1 6
0 5
0 4
0 5
1 3
0 12
0 1
输出数据 1
80
100
100
100
118
190
196
输入数据 2
6 7
1000000000 1000000000 1000000000 11 15 17
0 17
1 10000
1 51
0 92
0 53
1 16
0 1
输出数据 2
3000000094
3000060094
3000060400
3000060952
3000061270
3000061366
3000061366
Constraints
对于
50
%
50\%
50%的数据,
1
≤
n
,
q
,
a
i
≤
1
0
2
1\leq n,q,a_i \leq 10^2
1≤n,q,ai≤102
对于
100
%
100\%
100%的数据,
1
≤
n
,
q
≤
1
0
5
,
1
≤
a
i
≤
1
0
9
1\leq n,q \leq 10^5,1\leq a_i \leq 10^9
1≤n,q≤105,1≤ai≤109
Note
第一个测试用例,数组的变化如下:
1, 3, 2, 4, 10, 48
7, 9, 2, 4, 10, 48
7, 9, 7, 9, 15, 53
7, 9, 7, 9, 15, 53
10, 12, 10, 12, 18, 56
22, 24, 22, 24, 30, 68
23, 25, 23, 25, 31, 69
题解
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int t;
const int N=1e5+5;
ll n,a[N],q,sum1,sum2,num1,num2;
void solve(){
cin>>n>>q;
sum1=sum2=num1=num2=0;
for(int i=1;i<=n;i++){
cin>>a[i];
if(a[i]&1){
num1++;
sum1+=a[i];
}
else{
num2++;
sum2+=a[i];
}
}
while(q--){
int op,x;
cin>>op>>x;
if(op==0){
if(x&1){
sum2+=num2*x;
cout<<sum1+sum2<<"\n";
sum1+=sum2;
sum2=0;
num1+=num2;
num2=0;
}
else{
sum2+=num2*x;
cout<<sum1+sum2<<"\n";
}
}
else{
if(x&1){
sum1+=num1*x;
cout<<sum1+sum2<<"\n";
sum2+=sum1;
sum1=0;
num2+=num1;
num1=0;
}
else{
sum1+=num1*x;
cout<<sum1+sum2<<"\n";
}
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
t=1;
while(t--) solve();
return 0;
}