前缀和水题
2025-08-11 20:45:47
发布于:浙江
0阅读
0回复
0点赞
仔细阅读题面,不难发现,这题只有查询操作,而没有修改操作。
而前缀和刚好可以满足这个功能!
直接开三个前缀和,维护每种牛的个数即可。
比较一下时间复杂度:
树状数组、线段树:.
前缀和:。
而且相比树状数组、线段树,前缀和不需要专门写一大堆建树、维护、查询的函数。
以下是代码:
#include <bits/stdc++.h>
using namespace std;
int s1[100010], s2[100010], s3[100010];
int n,q;
int main(){
cin >> n >> q;
for (int i = 1; i <= n; i++){
int a;
cin >> a;
s1[i] = s1[i - 1];
s2[i] = s2[i - 1];
s3[i] = s3[i - 1];
if (a == 1) s1[i]++;
if (a == 2) s2[i]++;
if (a == 3) s3[i]++;
}
for (int i = 1; i <= q; i++){
int l, r;
cin >> l >> r;
cout << s1[r] - s1[l - 1] << " ";
cout << s2[r] - s2[l - 1] << " ";
cout << s3[r] - s3[l - 1] << endl;
}
return 0;
}
这里空空如也
有帮助,赞一个