Pagini recente » Cod sursa (job #941921) | Cod sursa (job #1099233) | Profil bytz | Cod sursa (job #49929) | Cod sursa (job #2486521)
#include <fstream>
#include <algorithm>
using namespace std;
const int NMAX = 100005;
int n, k, m, v[NMAX], last[NMAX], ans[NMAX], aib[NMAX];
int lsb(int x)
{
return (x & (-x));
}
void Update(int pos, int val)
{
for (int i = pos;i <= n;i += lsb(i))
aib[i] += val;
}
int Query(int pos)
{
int cnt = 0;
for (int i = pos;i >= 1;i -= lsb(i))
cnt += aib[i];
return cnt;
}
pair <pair <int, int>, int> seg[NMAX];
int main()
{
ifstream fin("distincte.in");
ofstream fout("distincte.out");
fin >> n >> k >> m;
for (int i = 1;i <= n;++i)
{
fin >> v[i];
Update(i, v[i]);
}
for (int i = 1;i <= m;++i)
{
fin >> seg[i].first.second >> seg[i].first.first;
seg[i].second = i;
}
sort(seg + 1, seg + m + 1);
int ind = 1;
for (int i = 1;i <= m;++i)
{
while (ind <= seg[i].first.first)
{
if (last[v[ind]] != 0)
Update(last[v[ind]], -v[ind]);
last[v[ind]] = ind;
++ind;
}
ans[seg[i].second] = Query(seg[i].first.first) - Query(seg[i].first.second - 1);
}
for (int i = 1;i <= m;++i)
fout << ans[i] << "\n";
fin.close();
fout.close();
return 0;
}