// #define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cmath>
#include <climits>
#include <vector>
#include <queue>
#include <deque>
#include <array>
#include <list>
#include <stack>
#include <tuple>
#include <set>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <string>
#include <cstring>
#include <random>
#include <bitset>
#include <iomanip>
#include <iterator>
#include <functional>
#include <ctime>
#include <chrono>
#include <cctype>
#include <fstream>
#include <ranges>
#include <numeric>
#include <complex>
#include <cassert>
using namespace std;
// #pragma GCC optimize("Ofast")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
#define int long long
#define sz(x) ((int)(x).size())
#define mp make_pair
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define pf push_front
#define ff first
#define ss second
#define unique(x) (x).erase(unique(all(x)), (x).end())
#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define ROF(i, a, b) for (int i = (a); i >= (b); i--)
using vi = vector<int>;
using vd = vector<double>;
using vpii = vector<pair<int, int>>;
using vpdd = vector<pair<double, double>>;
using pii = pair<int, int>;
using pdd = pair<double, double>;
template <typename Container>
void PRINT(const Container& container) {
for (const auto& e : container) {
cout << e << ' ';
} cout << '\n';
}
void print_double(double ans, int num) {
cout << fixed << setprecision(num) << ans << '\n';
}
const int inf = 1e18;
const double eps = 1e-9;
const double PI = 3.141592653589793;
string alh = "abcdefghijklmnopqrstuvwxyz";
string ALH = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int BLOCK_SIZE = 1000;
class Mo {
public:
struct QUERY {
int l;
int r;
int id;
bool operator<(const QUERY& other) const {
int block1 = l / BLOCK_SIZE;
int block2 = other.l / BLOCK_SIZE;
if (block1 != block2) {
return block1 < block2;
}
if (block1 % 2 == 1) {
return r < other.r;
}
else {
return r > other.r;
}
}
};
// --- STATE --- //
map<int, int> cnt;
int z = 0;
void ADD(int G) {
cnt[a[G]] += 1;
if (cnt[a[G]] == 0) {
// no changes
}
else if (cnt[a[G]] == 1) {
++z;
}
else if (cnt[a[G]] == 2) {
--z;
}
else {
// no changes
}
}
void REM(int G) {
cnt[a[G]] -= 1;
if (cnt[a[G]] == 0) {
--z;
}
else if (cnt[a[G]] == 1) {
++z;
}
else if (cnt[a[G]] == 2) {
// no changes
}
else {
// no changes
}
}
void add_right() {
R++;
ADD(R);
}
void add_left() {
L--;
ADD(L);
}
void rem_right() {
REM(R);
R--;
}
void rem_left() {
REM(L);
L++;
}
auto get_ans() {
return z;
}
// --- STATE --- //
Mo(vector<pair<int, int>> Q_, vector<int> a_) : a(a_) {
BLOCK_SIZE = (int)sqrt((int)a.size()) + 1;
for (int i = 0; i < (int)Q_.size(); i++) {
Q.push_back({ Q_[i].first, Q_[i].second, i });
}
sort(Q.begin(), Q.end());
ans.resize((int)Q.size());
L = 0; R = -1;
}
void GO() {
for (int i = 0; i < (int)ans.size(); i++) {
while (R < Q[i].r) {
add_right();
}
while (L > Q[i].l) {
add_left();
}
while (R > Q[i].r) {
rem_right();
}
while (L < Q[i].l) {
rem_left();
}
ans[Q[i].id] = get_ans();
}
}
void print_ans() {
for (auto p : ans) {
cout << p << '\n';
}
}
private:
vector<int> ans;
vector<QUERY> Q;
vector<int> a;
int L, R;
};
void Solve() {
int n; cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector<pair<int, int>> Q;
int q; cin >> q;
for (int i = 0; i < q; i++) {
int l, r; cin >> l >> r;
--l;
--r;
Q.push_back({ l, r });
}
Mo W(Q, a); W.GO();
W.print_ans();
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
/*
________________
/ Just solved it \
| in my mind |
\________________/
/
/
/> フ ___________
| _ _| | |
/`ミ _x 彡 | WA 2 |
/ | |__________|
/ ヽ ノ / /
/ ̄| | | | /_________ /
| ( ̄ヽ__ヽ_)_)
\二つ
*/
/*
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
*/
// auto start = chrono::high_resolution_clock::now();
int multitest = false;
if (multitest == true) {
int ctt; cin >> ctt;
for (int i = 0; i < ctt; i++) {
Solve();
}
}
else {
Solve();
}
// auto end = chrono::high_resolution_clock::now();
/*
cout << "Time taken: "
<< chrono::duration_cast<chrono::milliseconds>(end - start).count()
<< " milliseconds" << endl;
*/
return 0;
}
Ly8gI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAKCiNpbmNsdWRlIDxpb3N0cmVhbT4gCiNpbmNsdWRlIDxhbGdvcml0aG0+IAojaW5jbHVkZSA8Y21hdGg+IAojaW5jbHVkZSA8Y2xpbWl0cz4gCiNpbmNsdWRlIDx2ZWN0b3I+IAojaW5jbHVkZSA8cXVldWU+IAojaW5jbHVkZSA8ZGVxdWU+IAojaW5jbHVkZSA8YXJyYXk+IAojaW5jbHVkZSA8bGlzdD4gCiNpbmNsdWRlIDxzdGFjaz4gCiNpbmNsdWRlIDx0dXBsZT4gCiNpbmNsdWRlIDxzZXQ+IAojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4gCiNpbmNsdWRlIDxtYXA+IAojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4gCiNpbmNsdWRlIDxzdHJpbmc+IAojaW5jbHVkZSA8Y3N0cmluZz4gCiNpbmNsdWRlIDxyYW5kb20+IAojaW5jbHVkZSA8Yml0c2V0PiAKI2luY2x1ZGUgPGlvbWFuaXA+IAojaW5jbHVkZSA8aXRlcmF0b3I+IAojaW5jbHVkZSA8ZnVuY3Rpb25hbD4gCiNpbmNsdWRlIDxjdGltZT4gCiNpbmNsdWRlIDxjaHJvbm8+IAojaW5jbHVkZSA8Y2N0eXBlPiAKI2luY2x1ZGUgPGZzdHJlYW0+IAojaW5jbHVkZSA8cmFuZ2VzPiAKI2luY2x1ZGUgPG51bWVyaWM+IAojaW5jbHVkZSA8Y29tcGxleD4gCiNpbmNsdWRlIDxjYXNzZXJ0PiAKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyAjcHJhZ21hIEdDQyBvcHRpbWl6ZSgiT2Zhc3QiKSAKLy8gI3ByYWdtYSBHQ0MgdGFyZ2V0KCJhdngyLGJtaSxibWkyLGx6Y250LHBvcGNudCIpCgojZGVmaW5lIGludCAgICAgICAgICAgICAgIGxvbmcgbG9uZyAKI2RlZmluZSBzeih4KSAgICAgICAgICAgICAoKGludCkoeCkuc2l6ZSgpKSAKI2RlZmluZSBtcCAgICAgICAgICAgICAgICBtYWtlX3BhaXIgCiNkZWZpbmUgYWxsKHgpICAgICAgICAgICAgKHgpLmJlZ2luKCksICh4KS5lbmQoKSAKI2RlZmluZSBwYiAgICAgICAgICAgICAgICBwdXNoX2JhY2sgCiNkZWZpbmUgcGYgICAgICAgICAgICAgICAgcHVzaF9mcm9udCAKI2RlZmluZSBmZiAgICAgICAgICAgICAgICBmaXJzdCAKI2RlZmluZSBzcyAgICAgICAgICAgICAgICBzZWNvbmQgCiNkZWZpbmUgdW5pcXVlKHgpICAgICAgICAgKHgpLmVyYXNlKHVuaXF1ZShhbGwoeCkpLCAoeCkuZW5kKCkpIAojZGVmaW5lIG1pbjMoYSwgYiwgYykgICAgIG1pbihhLCBtaW4oYiwgYykpIAojZGVmaW5lIG1heDMoYSwgYiwgYykgICAgIG1heChhLCBtYXgoYiwgYykpIAojZGVmaW5lIEZPUihpLCBhLCBiKSAgICAgIGZvciAoaW50IGkgPSAoYSk7IGkgPD0gKGIpOyBpKyspIAojZGVmaW5lIFJPRihpLCBhLCBiKSAgICAgIGZvciAoaW50IGkgPSAoYSk7IGkgPj0gKGIpOyBpLS0pIAoKdXNpbmcgdmkgPSB2ZWN0b3I8aW50PjsKdXNpbmcgdmQgPSB2ZWN0b3I8ZG91YmxlPjsKdXNpbmcgdnBpaSA9IHZlY3RvcjxwYWlyPGludCwgaW50Pj47CnVzaW5nIHZwZGQgPSB2ZWN0b3I8cGFpcjxkb3VibGUsIGRvdWJsZT4+Owp1c2luZyBwaWkgPSBwYWlyPGludCwgaW50PjsKdXNpbmcgcGRkID0gcGFpcjxkb3VibGUsIGRvdWJsZT47Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgQ29udGFpbmVyPgp2b2lkIFBSSU5UKGNvbnN0IENvbnRhaW5lciYgY29udGFpbmVyKSB7CiAgICBmb3IgKGNvbnN0IGF1dG8mIGUgOiBjb250YWluZXIpIHsKICAgICAgICBjb3V0IDw8IGUgPDwgJyAnOwogICAgfSBjb3V0IDw8ICdcbic7Cn0KCnZvaWQgcHJpbnRfZG91YmxlKGRvdWJsZSBhbnMsIGludCBudW0pIHsKICAgIGNvdXQgPDwgZml4ZWQgPDwgc2V0cHJlY2lzaW9uKG51bSkgPDwgYW5zIDw8ICdcbic7Cn0KCmNvbnN0IGludCBpbmYgPSAxZTE4Owpjb25zdCBkb3VibGUgZXBzID0gMWUtOTsKY29uc3QgZG91YmxlIFBJID0gMy4xNDE1OTI2NTM1ODk3OTM7CgpzdHJpbmcgYWxoID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IjsKc3RyaW5nIEFMSCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CgppbnQgQkxPQ0tfU0laRSA9IDEwMDA7CgpjbGFzcyBNbyB7CnB1YmxpYzoKICAgIHN0cnVjdCBRVUVSWSB7CiAgICAgICAgaW50IGw7CiAgICAgICAgaW50IHI7CiAgICAgICAgaW50IGlkOwoKICAgICAgICBib29sIG9wZXJhdG9yPChjb25zdCBRVUVSWSYgb3RoZXIpIGNvbnN0IHsKICAgICAgICAgICAgaW50IGJsb2NrMSA9IGwgLyBCTE9DS19TSVpFOwogICAgICAgICAgICBpbnQgYmxvY2syID0gb3RoZXIubCAvIEJMT0NLX1NJWkU7CgogICAgICAgICAgICBpZiAoYmxvY2sxICE9IGJsb2NrMikgewogICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrMSA8IGJsb2NrMjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGJsb2NrMSAlIDIgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHIgPCBvdGhlci5yOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIHIgPiBvdGhlci5yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfTsKCgoKCgogICAgLy8gLS0tIFNUQVRFIC0tLSAvLwoKICAgIG1hcDxpbnQsIGludD4gY250OwogICAgaW50IHogPSAwOwoKICAgIHZvaWQgQUREKGludCBHKSB7CiAgICAgICAgY250W2FbR11dICs9IDE7CgogICAgICAgIGlmIChjbnRbYVtHXV0gPT0gMCkgewogICAgICAgICAgICAvLyBubyBjaGFuZ2VzCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNudFthW0ddXSA9PSAxKSB7CiAgICAgICAgICAgICsrejsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY250W2FbR11dID09IDIpIHsKICAgICAgICAgICAgLS16OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gbm8gY2hhbmdlcwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIFJFTShpbnQgRykgewogICAgICAgIGNudFthW0ddXSAtPSAxOwoKICAgICAgICBpZiAoY250W2FbR11dID09IDApIHsKICAgICAgICAgICAgLS16OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjbnRbYVtHXV0gPT0gMSkgewogICAgICAgICAgICArK3o7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGNudFthW0ddXSA9PSAyKSB7CiAgICAgICAgICAgIC8vIG5vIGNoYW5nZXMKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIG5vIGNoYW5nZXMKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRfcmlnaHQoKSB7CiAgICAgICAgUisrOwogICAgICAgIEFERChSKTsKICAgIH0KCiAgICB2b2lkIGFkZF9sZWZ0KCkgewogICAgICAgIEwtLTsKICAgICAgICBBREQoTCk7CiAgICB9CgogICAgdm9pZCByZW1fcmlnaHQoKSB7CiAgICAgICAgUkVNKFIpOwogICAgICAgIFItLTsKICAgIH0KCiAgICB2b2lkIHJlbV9sZWZ0KCkgewogICAgICAgIFJFTShMKTsKICAgICAgICBMKys7CiAgICB9CgogICAgYXV0byBnZXRfYW5zKCkgewogICAgICAgIHJldHVybiB6OwogICAgfQoKICAgIC8vIC0tLSBTVEFURSAtLS0gLy8KCgoKCgogICAgTW8odmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBRXywgdmVjdG9yPGludD4gYV8pIDogYShhXykgewogICAgICAgIEJMT0NLX1NJWkUgPSAoaW50KXNxcnQoKGludClhLnNpemUoKSkgKyAxOwoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpUV8uc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgUS5wdXNoX2JhY2soeyBRX1tpXS5maXJzdCwgUV9baV0uc2Vjb25kLCBpIH0pOwogICAgICAgIH0KICAgICAgICBzb3J0KFEuYmVnaW4oKSwgUS5lbmQoKSk7CgogICAgICAgIGFucy5yZXNpemUoKGludClRLnNpemUoKSk7CiAgICAgICAgTCA9IDA7IFIgPSAtMTsKICAgIH0KCiAgICB2b2lkIEdPKCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgKGludClhbnMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgd2hpbGUgKFIgPCBRW2ldLnIpIHsKICAgICAgICAgICAgICAgIGFkZF9yaWdodCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSAoTCA+IFFbaV0ubCkgewogICAgICAgICAgICAgICAgYWRkX2xlZnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgd2hpbGUgKFIgPiBRW2ldLnIpIHsKICAgICAgICAgICAgICAgIHJlbV9yaWdodCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSAoTCA8IFFbaV0ubCkgewogICAgICAgICAgICAgICAgcmVtX2xlZnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgYW5zW1FbaV0uaWRdID0gZ2V0X2FucygpOwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkIHByaW50X2FucygpIHsKICAgICAgICBmb3IgKGF1dG8gcCA6IGFucykgewogICAgICAgICAgICBjb3V0IDw8IHAgPDwgJ1xuJzsKICAgICAgICB9CiAgICB9Cgpwcml2YXRlOgogICAgdmVjdG9yPGludD4gYW5zOwoKICAgIHZlY3RvcjxRVUVSWT4gUTsKICAgIHZlY3RvcjxpbnQ+IGE7CgogICAgaW50IEwsIFI7Cn07Cgp2b2lkIFNvbHZlKCkgewogICAgaW50IG47IGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gYShuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgY2luID4+IGFbaV07CiAgICB9CgogICAgdmVjdG9yPHBhaXI8aW50LCBpbnQ+PiBROwoKICAgIGludCBxOyBjaW4gPj4gcTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcTsgaSsrKSB7CiAgICAgICAgaW50IGwsIHI7IGNpbiA+PiBsID4+IHI7CiAgICAgICAgLS1sOwogICAgICAgIC0tcjsKICAgICAgICBRLnB1c2hfYmFjayh7IGwsIHIgfSk7CiAgICB9CgogICAgTW8gVyhRLCBhKTsgVy5HTygpOwogICAgVy5wcmludF9hbnMoKTsKfQoKc2lnbmVkIG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKCiAgICAvKgogICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fXwogICAgICAgICAgICAgICAgICAgICAvIEp1c3Qgc29sdmVkIGl0IFwKICAgICAgICAgICAgICAgICAgICAgfCAgIGluIG15IG1pbmQgICB8CiAgICAgICAgICAgICAgICAgICAgIFxfX19fX19fX19fX19fX19fLwogICAgICAgICAgICAgICAgICAgIC8KICAgICAgICAgICAgICAgICAgIC8K44CA44CA44CA44CA44CA77yP77ye44CAIOODlSAgICAgICAgIF9fX19fX19fX19fCuOAgOOAgOOAgOOAgOOAgHwg44CAX+OAgCBffCAgICAgICB8ICAgICAgICAgIHwK44CAIOOAgOOAgOOAgO+8j2Djg58gX3gg5b2hICAgICAgIHwgICBXQSAyICAgfArjgIDjgIAg44CAIC/jgIDjgIDjgIAg44CAIHwgICAgICAgfF9fX19fX19fX198CuOAgOOAgOOAgCAv44CAIOODveOAgOOAgCDvvokgICAgICAgIC8gICAgICAgICAgLwrjgIDvvI/vv6N844CA44CAIHzjgIB844CAfCAgICAgICAvX19fX19fX19fIC8K44CAfCAo77+j44O977y/X+ODvV8pXykK44CA77y85LqM44GkCgogICAgKi8KCiAgICAvKgogICAgZnJlb3BlbigiaW5wdXQudHh0IiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwogICAgKi8KCiAgICAvLyBhdXRvIHN0YXJ0ID0gY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoKICAgIGludCBtdWx0aXRlc3QgPSBmYWxzZTsKICAgIGlmIChtdWx0aXRlc3QgPT0gdHJ1ZSkgewogICAgICAgIGludCBjdHQ7IGNpbiA+PiBjdHQ7CgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3R0OyBpKyspIHsKICAgICAgICAgICAgU29sdmUoKTsKICAgICAgICB9CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBTb2x2ZSgpOwogICAgfQoKICAgIC8vIGF1dG8gZW5kID0gY2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpOwoKICAgIC8qCiAgICBjb3V0IDw8ICJUaW1lIHRha2VuOiAiCiAgICAgICAgIDw8IGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJvbm86Om1pbGxpc2Vjb25kcz4oZW5kIC0gc3RhcnQpLmNvdW50KCkKICAgICAgICAgPDwgIiBtaWxsaXNlY29uZHMiIDw8IGVuZGw7CiAgICAqLwoKICAgIHJldHVybiAwOwp9