Pagini recente » Cod sursa (job #1942468) | Rezultatele filtrării | Cod sursa (job #2821947) | Cod sursa (job #3154963) | Cod sursa (job #3301889)
//https://infoarena.ro/problema/distincte
//#pragma GCC optimize ("Ofast")
//#pragma GCC optimize ("fast-math")
//#pragma GCC optimize ("unroll-loops")
//#define _USE_MATH_DEFINES
#include <iostream>
#include <fstream>
#include <vector>
//#include <cstring>
//#include <cmath>
//#include <bitset>
//#include <queue>
//#include <utility>
#include <algorithm>
//#include <string>
//#include <map>
//#include <climits>
//#include <iomanip>
using namespace std;
#define inti int
#define int int64_t
ifstream fin("distincte.in");
ofstream fout("distincte.out");
struct element
{
int first, second, index;
};
int v[100005], aib[100005], la[100005], rez[100005];
void update(int p, int val, int n)
{
int i;
for (i = p; i <= n; i += i & (-i))
{
aib[i] += val;
}
}
int suma(int p)
{
int i, rez = 0;
for (i = p; i >= 1; i -= i & (-i))
{
rez += aib[i];
}
return rez;
}
bool comparare(element a, element b)
{
if (a.second == b.second)
return a.first < b.first;
return a.second < b.second;
}
bool main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, k, m, i, x, y,j;
vector <element> q;
fin >> n >> k >> m;
q.resize(m + 1);
for (i = 1; i <= n; ++i)
{
fin >> v[i];
}
for (i = 1; i <= m; ++i)
{
fin >> x >> y;
q[i].first=x;
q[i].second=y;
q[i].index=i;
}
sort(q.begin(), q.end(), comparare);
/*for (i = 1; i <= m; ++i)
{
cout << q[i].first << " " << q[i].second << "\n";
}*/
j = 1;
for (i = 1; i <= n; ++i)
{
if (la[v[i]])
{
update(la[v[i]], -v[i], n);
}
update(i, v[i], n);
la[v[i]] = i;
/*for (int k = 1; k <= n; ++k)
cout << aib[k] << " ";
cout << "\n";*/
while ((j <= m) && (i == q[j].second))
{
rez[q[j].index] = (suma(q[j].second) - suma(q[j].first - 1))%666013;
++j;
}
if (j > m)
break;
}
for(i=1;i<=m;++i)
{
fout << rez[i] << "\n";
}
return 0;
}