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;
}
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务