Cod sursa(job #2893335)

Utilizator 100pCiornei Stefan 100p Data 25 aprilie 2022 19:26:06
Problema Distincte Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <bits/stdc++.h>
#define ull unsigned long long
#define FILES freopen("distincte.in","r",stdin);\
              freopen("distincte.out","w",stdout);
#define CMAX 15485863
#define fastio std::ios_base::sync_with_stdio(NULL),cin.tie(NULL),cout.tie(NULL);
#define mp make_pair
#define INF 1e18
#define mod 666013
#define ll long long
#define SMAX 300
#define MAX 100000
#define pb push_back
#define add emplace_back
#define void inline void
using namespace std;
struct solve
{
    int first, second, third;
};
int n,k,m,sqr,fr[MAX+5],v[MAX+5],ANS[MAX+5];
ll ans;
vector<solve> q;
inline bool cmp(solve a,solve b)
{
    if(a.first / sqr != b.first / sqr)
        return a.first / sqr < b.first / sqr;
    return a.second < b.second;
}
int main()
{
    fastio
    FILES
    cin >> n >> k >> m;
    sqr = sqrt(n);
    for(int i = 1; i <= n; ++i)
        cin >> v[i];
    for(int i = 1; i <= m; ++i)
    {
        int a,b;
        cin >> a >> b;
        q.pb({a,b,i});
    }
    sort(q.begin(),q.end(),cmp);
    for(int i = q[0].first;i <= q[0].second; ++i)
    {
        if(!fr[v[i]]) ans += v[i];
        fr[v[i]]++;
    }
    ANS[q[0].third] = ans % mod;
    int j = 1, x = q[0].first, y = q[0].second;
    while(j < q.size())
    {
        while(x > q[j].first)
        {
            x--;
            if(!fr[v[x]]) ans += v[x];
            fr[v[x]]++;
        }
        while(x < q[j].first)
        {
            fr[v[x]]--;
            if(!fr[v[x]]) ans -= v[x];
            x++;
        }
        while(y < q[j].second)
        {
            y++;
            if(!fr[v[y]]) ans += v[y];
            fr[v[y]]++;
        }
        while(y > q[j].second)
        {
            fr[v[y]]--;
            if(!fr[v[y]]) ans -= v[y];
            y--;
        }
        ANS[q[j].third] = ans % mod;
        j++;
    }
    for(int i = 1;i <= m; ++i)
        cout << ANS[i] << '\n';
}