样例输入1
abcdefghijklmnopqrstuvwxyz
3
1 26
1 10
19 23
样例输出1
2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 1
样例输入2
aymrnptzhklcbuxfdvjsgqweio
2
2 9
18 21
样例输出2
0 0 0 0 0 0 1 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 1 1
思想
一眼差分
但是需要注意的是输入的字符串并不一定是按abcd字典序升序排的,因此最后我们需要做一个哈希处理
#include<bits/stdc++.h>
using namespace std;
const int N = 30;
int a[N], sum[N], ans[N];
void insert(int l, int r)
{
a[l]++, a[r + 1]--;
}
int main()
{
string s; cin >> s;
int n; cin >> n;
for (int i = 0; i < n; i++)
{
int l, r; cin >> l >> r;
insert(l, r);
}
for (int i = 1; i <= 26; i++) sum[i] = sum[i - 1] + a[i];
for (int i = 1; i <= 26; i++) ans[s[i-1] - 'a'+1] = sum[i]; //哈希处理
for (int i = 1; i <= 26; i++)cout << ans[i] << " "; //输出就是按照字典序输出的
return 0;
}