添加链接描述
用map存储每个字符串标记然后用二维数组求前缀和
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
const int N=15,M=1e3+9;
string ch;
typedef pair<string,ll> pii;
int sum[M][M];
map<string,int> mp;
int cnt;
signed main(){
std::ios::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin>>n;
for(int i=1;i<=n;i++){
ll x;
cin>>ch>>x;
if(!mp.count(ch))
mp[ch]=++cnt;
int tmp=0;
for(int j=1;j<=cnt;j++){
if(j==mp[ch])sum[i][j]=sum[i-1][j]+x;
else {
sum[i][j]=sum[i-1][j];
}
// cout<<sum[it.first][i]<<endl;
}
}
int q;
cin>>q;
while(q--){
int l,r;
cin>>l>>r>>ch;
//cout<<ch<<endl;
//cout<<sum["xyy"][r]<<endl;
printf("%lld\n",sum[r][mp[ch]]-sum[l-1][mp[ch]]);
}
return 0;
}