Language: C++

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
#define maxn 1e6
#define maxc 1001000
int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
struct query {
    int l, r, time, id;
} q[maxn];
struct modify {
    int pos, color, last;
} c[maxn];
int cntq, cntc, n, m, size, bnum;
int cmp(query a, query b) {
    return (belong[a.l] ^ belong[b.l]) ? belong[a.l] < belong[b.l] : ((belong[a.r] ^ belong[b.r]) ? belong[a.r] < belong[b.r] : a.time < b.time);
}
#define isdigit(x) ((x) >= '0' && (x) <= '9')
inline int read() {
    int res = 0;
    char c = getchar();
    while(!isdigit(c)) c = getchar();
    while(isdigit(c)) res = (res << 1) + (res << 3) + (c ^ 48), c = getchar();
    return res;
}
int main() {
    n = read();
    char s[maxn];
    scanf("%s",s+1);
	 m = read();
    size = pow(n, 2.0 / 3.0);
    bnum = ceil((double)n / size);
    for(int i = 1; i <= bnum; ++i) 
        for(int j = (i - 1) * size + 1; j <= i * size; ++j) belong[j] = i;
    for(int i = 1; i <= n; ++i) 
        a[i] =s[i]-'a';
    for(int i = 1; i <= m; ++i) {
        int opt;
        scanf("%d",&opt);
        if(opt==2) {
            q[++cntq].l = read();
            q[cntq].r = read();
            q[cntq].time = cntc;
            q[cntq].id = cntq;
        }
        else if(opt==1) {
            c[++cntc].pos = read();
            char cc[2];
            scanf("%s",cc);
            c[cntc].color =cc[0]-'a';
        }
    }
    sort(q + 1, q + cntq + 1, cmp);
    int l = 1, r = 0, time = 0, now = 0;
    for(int i = 1; i <= cntq; ++i) {
        int ql = q[i].l, qr = q[i].r, qt = q[i].time;
        while(l < ql) now -= !--cnt[a[l++]];
        while(l > ql) now += !cnt[a[--l]]++;
        while(r < qr) now += !cnt[a[++r]]++;
        while(r > qr) now -= !--cnt[a[r--]];
        while(time < qt) {
            ++time;
            if(ql <= c[time].pos && c[time].pos <= qr) now -= !--cnt[a[c[time].pos]] - !cnt[c[time].color]++;
            swap(a[c[time].pos], c[time].color);
        }
        while(time > qt) {
            if(ql <= c[time].pos && c[time].pos <= qr) now -= !--cnt[a[c[time].pos]] - !cnt[c[time].color]++;
            swap(a[c[time].pos], c[time].color);
            --time;
        }
        ans[q[i].id] = now;
    }
    for(int i = 1; i <= cntq; ++i) 
        printf("%d\n", ans[i]);
    return 0;
}


Compiler output:
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:7: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |       ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:8:7: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |       ^~~~
a.cc:6:14: error: size of array 'a' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:7: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |       ^~~~
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:29: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                             ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:8:29: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                             ^~~~
a.cc:6:14: error: size of array 'ans' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:29: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                             ^~~~
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:43: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                                           ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:8:43: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                                           ^~~~
a.cc:6:14: error: size of array 'belong' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:8:43: note: in expansion of macro 'maxn'
    8 | int a[maxn], cnt[maxc], ans[maxn], belong[maxn];
      |                                           ^~~~
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:11:5: note: in expansion of macro 'maxn'
   11 | } q[maxn];
      |     ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:11:5: note: in expansion of macro 'maxn'
   11 | } q[maxn];
      |     ^~~~
a.cc:6:14: error: size of array 'q' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:11:5: note: in expansion of macro 'maxn'
   11 | } q[maxn];
      |     ^~~~
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:14:5: note: in expansion of macro 'maxn'
   14 | } c[maxn];
      |     ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:14:5: note: in expansion of macro 'maxn'
   14 | } c[maxn];
      |     ^~~~
a.cc:6:14: error: size of array 'c' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:14:5: note: in expansion of macro 'maxn'
   14 | } c[maxn];
      |     ^~~~
a.cc: In function 'int main()':
a.cc:6:14: error: conversion from 'double' to 'long unsigned int' in a converted constant expression
    6 | #define maxn 1e6
      |              ^~~
a.cc:29:12: note: in expansion of macro 'maxn'
   29 |     char s[maxn];
      |            ^~~~
a.cc:6:14: error: could not convert '1.0e+6' from 'double' to 'long unsigned int'
    6 | #define maxn 1e6
      |              ^~~
      |              |
      |              double
a.cc:29:12: note: in expansion of macro 'maxn'
   29 |     char s[maxn];
      |            ^~~~
a.cc:6:14: error: size of array 's' has non-integral type 'double'
    6 | #define maxn 1e6
      |              ^~~
a.cc:29:12: note: in expansion of macro 'maxn'
   29 |     char s[maxn];
      |            ^~~~