Pagini recente » Cod sursa (job #1439512) | Cod sursa (job #450305) | Cod sursa (job #2887717) | Cod sursa (job #1082995) | Cod sursa (job #2520107)
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
const int NMax = 1e5, MOD = 666013;
int N, M, K, AIB[4 * NMax + 5], Prev[NMax + 5], Last[NMax + 5], V[NMax + 5], Sol[NMax + 5];
vector < pair<int, int> > Q[NMax + 5];
void Update(int pos, int val)
{
for(int i = pos; i <= N; i += (i & (-i)))
AIB[i] = (AIB[i] + val + MOD) % MOD;
}
int Sum(int pos)
{
int Sol = 0;
for(int i = pos; i > 0; i -= (i & (-i)))
Sol = (Sol + AIB[i]) % MOD;
return Sol;
}
int main()
{
fin >> N >> K >> M;
for(int i = 1; i <= N; i++)
{
fin >> V[i];
Prev[i] = Last[V[i]];
Last[V[i]] = i;
}
for(int i = 1, x, y; i <= M; i++)
{
fin >> x >> y;
Q[y].push_back({x, i});
}
for(int i = 1; i <= N; i++)
{
Update(i, V[i]);
if(Prev[i])
Update(Prev[i], -V[i]);
for(auto st : Q[i])
Sol[st.second] = (Sum(i) - Sum(st.first - 1) + MOD) % MOD;
}
for(int i = 1; i <= M; i++)
fout << Sol[i] << '\n';
fin.close();
fout.close();
return 0;
}