TakahiroNakamori

TakahiroNakamori

ナカモリタカヒロ

 
 

Simple String Queries

問題

E – Simple String Queries
プログラミング初級者から上級者まで楽しめる、競技プログラミングコンテストサイト「AtCoder」。オンラインで毎週開催プログラミングコンテストを開催しています。競技…

記録

解法

コード例

#include <bits/stdc++.h>
using namespace std;
#include <atcoder/all>
using namespace atcoder;
using ll = long long;
using P = pair<int, int>;
#define rep(i, n) for(int i = 0; i < (n); ++i)
// using mint = modint998244353;
// using mint = modint1000000007;
// const int mod = 1000000007;
// const ll INF = 1LL << 62;
// const int INF = 1001001001;

int main() {
  int N;
  cin >> N;

  string S;
  cin >> S;

  int Q;
  cin >> Q;

  vector<set<int>> st(26);
  rep(i, N) { st[S[i] - 'a'].insert(i); }

  while(0 < Q) {
    int t;
    cin >> t;
    if(t == 1) {
      int i;
      char c;
      cin >> i >> c;
      i--;
      st[S[i] - 'a'].erase(i);
      S[i] = c;
      st[S[i] - 'a'].insert(i);
    } else {
      int l, r;
      cin >> l >> r;
      l--;
      int ans = 0;
      rep(i, 26) {
        auto v = st[i].lower_bound(l);
        if(v != st[i].end() && *v < r) {
          ans++;
        }
      }
      cout << ans << endl;
    }

    Q--;
  }

  return 0;
}