Pagini recente » Cod sursa (job #76046) | Cod sursa (job #76047) | Cod sursa (job #1349321) | Monitorul de evaluare | Cod sursa (job #3345296)
#include <fstream>
#include <iostream>
#include <algorithm>
#include <map>
#include <vector>
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
#define NMAX 100005
int v[NMAX];
int aib[NMAX];
int used[NMAX];
int n;
#define MOD 666013
map<int, vector<pair<int, int>>> mp;
map<int, int> ans;
pair<int, int> q[NMAX];
bool cmp(pair<int, int> a, pair<int, int> b)
{
return a.second < b.second;
}
void update(int pos, int val)
{
for (int i = pos; i <= n; i += i & (-i))
{
aib[i] += val;
aib[i] %= MOD;
}
}
int query(int pos)
{
int r = 0;
for (int i = pos; i >= 1; i -= i & (-i))
{
r += aib[i];
r %= MOD;
}
return r;
}
int main()
{
int k, m;
fin >> n >> k >> m;
for (int i = 1; i <= n; i++)
{
fin >> v[i];
}
for (int i = 1; i <= m; i++)
{
int a, b;
fin >> a >> b;
mp[b].push_back({a, i});
}
for (int i = 1; i <= n; i++)
{
update(i, v[i]);
if (used[v[i]])
{
update(used[v[i]], -v[i]);
}
used[v[i]] = i;
for (auto &j : mp[i])
{
ans[j.second] = (query(i) - query(j.first - 1) + MOD) % MOD;
}
}
for (auto i : ans)
{
fout << i.second << '\n';
}
return 0;
}