前缀和板子题,顶多橙题。适合像我一样的蒟蒻练手。。

#include<bits/stdc++.h>
using namespace std;

const int N = 1E6 + 10;
int sum[N];
string s;
int q;
int main(){
	cin >> s;
	int n = s.size();
	s = " " + s;
	for(int i = 1;i <= n;i++){
		int add;
		if(s[i] == 'P') add = 3;
		if(s[i] == 'p') add = 2;
		if(s[i] == 'G') add = 1;
		if(s[i] == 'g') add = 0;
		if(s[i] == 'm') add = 0;
		sum[i] = sum[i - 1] + add;
	}
	cin >> q;
	while(q--){
		int l, r;
		cin >> l >> r;
		cout << sum[r] - sum[l - 1] << "\n";
	}
}

感觉本人码风还可以。