Codeforces Round #590 (Div. 3)D.Distinct Characters Queries
链接:https://codeforces.com/contest/1234/problem/D
题意:参考线段树,树状数组等的单点修改,区间查询;
解题思路:这题真的很简单呐,打的时候没来的及看,被卡C了,不过话说这么简单为什么要写题解呢???
因为热爱啊(手动狗头),还可以顺便吐槽一下自己的心情啥的,反正也是写给自己看的,开心。思路就是26个树状数组,set等等不胜枚举。。。
贴一个set的代码/?这个还算是别人的代码,我的auto不知道为啥用不了
#include <bits/stdc++.h>
using namespace std;
vector<set<int> > v(26);
int main()
{
string s;
int n, q, l, r, pos;
char c;
cin >> s;
int len = s.length();
for(int i = 0; i < len; i++){
v[s[i] - 'a'].insert(i);
}
cin >> n;
while(n--){
cin >> q;
if(q == 1){
cin >> pos >> c;
pos--;
v[s[pos] - 'a'].erase(pos);
s[pos] = c;
v[s[pos] - 'a'].insert(pos);
}
else {
cin >> l >> r;
l--, r--;
int cnt = 0;
for(int i = 0; i < 26; i++){
auto it=v[i].lower_bound(l);
if(it != v[i].end() && *it <= r){
cnt++;
}
}
cout << cnt << endl;
}
}
return 0;
}