Pagini recente » Cod sursa (job #977448) | Cod sursa (job #2490572) | Monitorul de evaluare | Cod sursa (job #206486) | Cod sursa (job #3337730)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("distincte.in");
ofstream fout ("distincte.out");
const int dim = 1e5 + 2, mod = 666013, oo = 1e9;
int n, i, m, k, v[dim], ultimul[dim], t[2 * dim];
void build()
{
for(i = n; i >= 1; i--)
t[i] = t[i * 2] + t[i * 2 + 1];
}
int query(int st, int dr)
{
int rez = 0;
st = st + n - 1;
dr = dr + n;
while(st < dr)
{
if(st % 2 == 1)
{
rez += t[st];
st++;
}
if(dr % 2 == 1)
{
dr--;
rez += t[dr];
}
st = st / 2;
dr = dr / 2;
}
return rez;
}
int main()
{
fin >> n >> k>> m;
for(i = 1; i <= n; i++)
{
fin >> v[i];
if(ultimul[v[i]] != 0)
t[ultimul[v[i]] + n - 1] = 0;
ultimul[v[i]] = i;
t[n + i - 1] = v[i];
}
build();
for(i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
fout << query(x, y) + 1 << '\n';
}
return 0;
}