fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main() {
  5. string s;
  6. cin >> s;
  7. int q;
  8. cin >> q;
  9.  
  10. s = " " + s;
  11. int n = s.size() - 1;
  12.  
  13. vector<vector<int>> queries(q, vector<int>(3, 0));
  14. for (int i = 0; i < q; i++) {
  15. cin >> queries[i][0] >> queries[i][1] >> queries[i][2];
  16. }
  17.  
  18. unordered_map<char, set<int>> mp;
  19. for (int i = 1; i <= n; i++) {
  20. mp[s[i]].insert(i);
  21. }
  22.  
  23. for (int i = 0; i < q; i++) {
  24. int id = queries[i][0];
  25.  
  26. if (id == 1) {
  27. int idx = queries[i][1];
  28. char old_char = s[idx];
  29. char new_char = 'a' + queries[i][2] - 1;
  30.  
  31. mp[old_char].erase(idx);
  32. s[idx] = new_char;
  33. mp[new_char].insert(idx);
  34.  
  35. cout << s.substr(1) << " "; // skip dummy char
  36. } else {
  37. int l = queries[i][1];
  38. int r = queries[i][2];
  39. int count = 0;
  40.  
  41. for (char c = 'a'; c <= 'z'; c++) {
  42. auto it = mp[c].upper_bound(r);
  43. if (it != mp[c].begin()) {
  44. --it;
  45. if (*it >= l) count++;
  46. }
  47. }
  48.  
  49. cout << count << " ";
  50. }
  51. }
  52.  
  53. return 0;
  54. }
  55.  
Success #stdin #stdout 0s 5284KB
stdin
abccbda
5
2 3 6
1 2 3
2 2 4
1 1 5
2 1 7
stdout
3 acccbda 1 ecccbda 5