Language: C++

#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <cstdio>
#include <string>
#include <cmath>
#include <queue>
#include <tuple>
#include <bitset>
#include <cassert>
#include <chrono>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <random>
#include <set>
#include <stack>
#include <time.h>

//#include <bits/stdc++.h>
#define maxs(x,y) x = max(x,y)
#define mins(x,y) x = min(x,y)
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define repr(i, n) for (int i = (n) - 1; i >= 0; i--)
#define FOR(i,i0,n) for(int (i)=(i0);(i)<(n);(i)++)
#define FORR(i,i0,n) for(int (i)=(n)-1; (i)>=(i0);(i)--)
#define SORT(x) sort(x.begin(),x.end())
#define SORTR(x) sort(x.begin(),x.end(),greater<vector<int>>())
#define rn return
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define mt make_tuple

using namespace std;
using ll = long long;
typedef std::pair<int,int> pii;
typedef std::pair<int,double> pid;
typedef std::vector<int> vi;
typedef std::vector<pii> vii;

#define PI 3.14159265358979323846264338327950L
const int mod = 1000000007;




struct item{ // CHANGE
    unordered_set<int> set;
};

class SegTree{
public:
    int size;
    vector<item> values;
    
    SegTree(int n){
        size = 1;
        while(size<n) size*=2;
        values.resize(size*2-1);
    }
    
    item NEUTRAL_ELEMENT = {unordered_set<int>()}; // CHANGE
    item single(int val) { // CHANGE
        item ret;
        ret.set.insert(val);
        return ret;
    }
    item merge(item a, item b){ // CHANGE
        for(auto e:a.set) b.set.insert(e);
        return b;
    }
    
    
    void build(vector<int>& a){
        build(a,0,0,size);
    };
    void build(vector<int>& a, int node, int nodeL, int nodeR){
        if (nodeR-nodeL == 1) {
            if(nodeL<a.size()) values[node] = single(a[nodeL]); // SINGLE
            return;
        }
        int m = (nodeL+nodeR)/2;
        build(a,node*2+1,nodeL,m);
        build(a,node*2+2,m,nodeR);
        values[node] = merge(values[node*2+1],values[node*2+2]);
    }
    

    item calc(int l, int r){
        return calc(l,r,0,0,size); 
    }
    item calc(int l,int r, int node, int nodeL, int nodeR){
        if (r<=nodeL || l>=nodeR) return NEUTRAL_ELEMENT;
        if (l<=nodeL && nodeR<=r) return values[node];
        int m = (nodeL+nodeR)/2;
        return merge(calc(l,r,node*2+1,nodeL,m),calc(l,r,node*2+2,m,nodeR));
    }
    
    
    
};



void solve(){
    int n,q;
    cin >> n >> q;
    vector<int> c(n);
    rep(i,n) cin >> c[i];
    SegTree st(n);
    st.build(c);
    rep(i,q){
        int l,r;
        cin >> l >> r;
        l--;
        cout << st.calc(l,r).set.size() << endl;
    }
}


int main(){
    int T;
    //cin >> T;
    T = 1;
    while(T--){
        solve();
        cout << endl;
    }
}











Compiler output:
a.cc:52:5: error: 'unordered_set' does not name a type
   52 |     unordered_set<int> set;
      |     ^~~~~~~~~~~~~
a.cc:66:29: error: 'unordered_set' was not declared in this scope
   66 |     item NEUTRAL_ELEMENT = {unordered_set<int>()}; // CHANGE
      |                             ^~~~~~~~~~~~~
a.cc:19:1: note: 'std::unordered_set' is defined in header '<unordered_set>'; this is probably fixable by adding '#include <unordered_set>'
   18 | #include <stack>
  +++ |+#include <unordered_set>
   19 | #include <time.h>
a.cc:66:43: error: expected primary-expression before 'int'
   66 |     item NEUTRAL_ELEMENT = {unordered_set<int>()}; // CHANGE
      |                                           ^~~
a.cc:66:43: error: expected '}' before 'int'
a.cc:66:28: note: to match this '{'
   66 |     item NEUTRAL_ELEMENT = {unordered_set<int>()}; // CHANGE
      |                            ^
a.cc:66:43: error: expected ';' before 'int'
   66 |     item NEUTRAL_ELEMENT = {unordered_set<int>()}; // CHANGE
      |                                           ^~~
a.cc: In member function 'item SegTree::single(int)':
a.cc:69:13: error: 'struct item' has no member named 'set'
   69 |         ret.set.insert(val);
      |             ^~~
a.cc: In member function 'item SegTree::merge(item, item)':
a.cc:73:22: error: 'struct item' has no member named 'set'
   73 |         for(auto e:a.set) b.set.insert(e);
      |                      ^~~
a.cc:73:29: error: 'struct item' has no member named 'set'
   73 |         for(auto e:a.set) b.set.insert(e);
      |                             ^~~
a.cc: In function 'void solve()':
a.cc:120:30: error: 'struct item' has no member named 'set'
  120 |         cout << st.calc(l,r).set.size() << endl;
      |                              ^~~