思路:很裸的前缀和,这题我们用三个数组来分别存储1,2,3编号的分布情况即可(因为你模拟查询肯定会爆t滴)
ACcode:
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e5+10;
int n,q,a[N],b[N],c[N];
void solve() {
cin>>n>>q;
for(int i=1; i<=n; i++) {
int x;
cin>>x;
if(x==1)a[i]++;
else if(x==2)b[i]++;
else c[i]++;
}
for(int i=1; i<=n; i++) {
a[i]+=a[i-1];
b[i]+=b[i-1];
c[i]+=c[i-1];
}
while(q--) {
int x,y;
cin>>x>>y;
cout<<a[y]-a[x-1]<<" "<<b[y]-b[x-1]<<" "<<c[y]-c[x-1]<<"\n";
}
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t=1;
//cin>>t;
while(t--) {
solve();
}
return 0;
}
over~