Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define per pair<pair<int,int> , int >
- #define f first
- #define s second
- #define MOD 666013
- #define ub(x) (x&(-x))
- using namespace std;
- class InParser
- {
- private:
- FILE *fin;
- char *buff;
- int sp;
- char read_ch()
- {
- ++sp;
- if (sp == 4096)
- {
- sp = 0;
- fread(buff, 1, 4096, fin);
- }
- return buff[sp];
- }
- public:
- InParser(const char* nume)
- {
- fin = fopen(nume, "r");
- buff = new char[4096]();
- sp = 4095;
- }
- InParser& operator >> (int &n)
- {
- char c;
- while (!isdigit(c = read_ch()) && c != '-');
- int sgn = 1;
- if (c == '-')
- {
- n = 0;
- sgn = -1;
- }
- else
- {
- n = c - '0';
- }
- while (isdigit(c = read_ch()))
- {
- n = 10 * n + c - '0';
- }
- n *= sgn;
- return *this;
- }
- InParser& operator >> (long long &n)
- {
- char c;
- n = 0;
- while (!isdigit(c = read_ch()) && c != '-');
- long long sgn = 1;
- if (c == '-')
- {
- n = 0;
- sgn = -1;
- }
- else
- {
- n = c - '0';
- }
- while (isdigit(c = read_ch()))
- {
- n = 10 * n + c - '0';
- }
- n *= sgn;
- return *this;
- }
- } fin("distincte.in");
- class OutParser
- {
- private:
- FILE *fout;
- char *buff;
- int sp;
- void write_ch(char ch)
- {
- if (sp == 50000)
- {
- fwrite(buff, 1, 50000, fout);
- sp = 0;
- buff[sp++] = ch;
- }
- else
- {
- buff[sp++] = ch;
- }
- }
- public:
- OutParser(const char* name)
- {
- fout = fopen(name, "w");
- buff = new char[50000]();
- sp = 0;
- }
- ~OutParser()
- {
- fwrite(buff, 1, sp, fout);
- fclose(fout);
- }
- OutParser& operator << (int vu32)
- {
- if (vu32 <= 9)
- {
- write_ch(vu32 + '0');
- }
- else
- {
- (*this) << (vu32 / 10);
- write_ch(vu32 % 10 + '0');
- }
- return *this;
- }
- OutParser& operator << (long long vu64)
- {
- if (vu64 <= 9)
- {
- write_ch(vu64 + '0');
- }
- else
- {
- (*this) << (vu64 / 10);
- write_ch(vu64 % 10 + '0');
- }
- return *this;
- }
- OutParser& operator << (char ch)
- {
- write_ch(ch);
- return *this;
- }
- OutParser& operator << (const char *ch)
- {
- while (*ch)
- {
- write_ch(*ch);
- ++ch;
- }
- return *this;
- }
- } fout("distincte.out");
- int n,m,k,aib[100005],v[100005],ok[100005],sol[100005];
- per a[100005];
- inline void update(int poz,int val)
- {
- for (int i = poz; i<=n; i+=ub(i))
- aib[i]=(aib[i]+val+MOD)%MOD;
- return ;
- }
- inline int query(int poz)
- {
- int sum = 0;
- for (int i = poz; i; i-=ub(i))
- sum=(sum+aib[i]+MOD)%MOD;
- return sum;
- }
- int main()
- {
- fin >> n >> k >> m;
- for (int i = 1; i<=n; ++i)
- fin >> v[i];
- for (int i = 1; i<=m; ++i)
- {
- fin >> a[i].f.s >> a[i].f.f;
- a[i].s = i;
- }
- sort(a+1,a+m+1);
- int j = 1;
- for (int i = 1; i<=m; ++i)
- {
- for (; j<=a[i].f.f ; ++j)
- {
- if (ok[v[j]]!=0)
- update(ok[v[j]],-v[j]);
- update(j,v[j]);
- ok[v[j]] = j;
- }
- sol[a[i].s] = (query(a[i].f.f) - query(a[i].f.s-1)+MOD)%MOD;
- }
- for (int i = 1; i<=m; ++i)
- fout << sol[i] << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement