Advertisement
Guest User

Untitled

a guest
Jan 19th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.79 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define per pair<pair<int,int> , int >
  3. #define f first
  4. #define s second
  5. #define MOD 666013
  6. #define ub(x) (x&(-x))
  7. using namespace std;
  8. class InParser
  9. {
  10. private:
  11. FILE *fin;
  12. char *buff;
  13. int sp;
  14.  
  15. char read_ch()
  16. {
  17. ++sp;
  18. if (sp == 4096)
  19. {
  20. sp = 0;
  21. fread(buff, 1, 4096, fin);
  22. }
  23. return buff[sp];
  24. }
  25.  
  26. public:
  27. InParser(const char* nume)
  28. {
  29. fin = fopen(nume, "r");
  30. buff = new char[4096]();
  31. sp = 4095;
  32. }
  33.  
  34. InParser& operator >> (int &n)
  35. {
  36. char c;
  37. while (!isdigit(c = read_ch()) && c != '-');
  38. int sgn = 1;
  39. if (c == '-')
  40. {
  41. n = 0;
  42. sgn = -1;
  43. }
  44. else
  45. {
  46. n = c - '0';
  47. }
  48. while (isdigit(c = read_ch()))
  49. {
  50. n = 10 * n + c - '0';
  51. }
  52. n *= sgn;
  53. return *this;
  54. }
  55.  
  56. InParser& operator >> (long long &n)
  57. {
  58. char c;
  59. n = 0;
  60. while (!isdigit(c = read_ch()) && c != '-');
  61. long long sgn = 1;
  62. if (c == '-')
  63. {
  64. n = 0;
  65. sgn = -1;
  66. }
  67. else
  68. {
  69. n = c - '0';
  70. }
  71. while (isdigit(c = read_ch()))
  72. {
  73. n = 10 * n + c - '0';
  74. }
  75. n *= sgn;
  76. return *this;
  77. }
  78. } fin("distincte.in");
  79. class OutParser
  80. {
  81. private:
  82. FILE *fout;
  83. char *buff;
  84. int sp;
  85.  
  86. void write_ch(char ch)
  87. {
  88. if (sp == 50000)
  89. {
  90. fwrite(buff, 1, 50000, fout);
  91. sp = 0;
  92. buff[sp++] = ch;
  93. }
  94. else
  95. {
  96. buff[sp++] = ch;
  97. }
  98. }
  99.  
  100.  
  101. public:
  102. OutParser(const char* name)
  103. {
  104. fout = fopen(name, "w");
  105. buff = new char[50000]();
  106. sp = 0;
  107. }
  108. ~OutParser()
  109. {
  110. fwrite(buff, 1, sp, fout);
  111. fclose(fout);
  112. }
  113.  
  114. OutParser& operator << (int vu32)
  115. {
  116. if (vu32 <= 9)
  117. {
  118. write_ch(vu32 + '0');
  119. }
  120. else
  121. {
  122. (*this) << (vu32 / 10);
  123. write_ch(vu32 % 10 + '0');
  124. }
  125. return *this;
  126. }
  127.  
  128. OutParser& operator << (long long vu64)
  129. {
  130. if (vu64 <= 9)
  131. {
  132. write_ch(vu64 + '0');
  133. }
  134. else
  135. {
  136. (*this) << (vu64 / 10);
  137. write_ch(vu64 % 10 + '0');
  138. }
  139. return *this;
  140. }
  141.  
  142. OutParser& operator << (char ch)
  143. {
  144. write_ch(ch);
  145. return *this;
  146. }
  147. OutParser& operator << (const char *ch)
  148. {
  149. while (*ch)
  150. {
  151. write_ch(*ch);
  152. ++ch;
  153. }
  154. return *this;
  155. }
  156. } fout("distincte.out");
  157. int n,m,k,aib[100005],v[100005],ok[100005],sol[100005];
  158. per a[100005];
  159. inline void update(int poz,int val)
  160. {
  161. for (int i = poz; i<=n; i+=ub(i))
  162. aib[i]=(aib[i]+val+MOD)%MOD;
  163. return ;
  164.  
  165. }
  166. inline int query(int poz)
  167. {
  168. int sum = 0;
  169. for (int i = poz; i; i-=ub(i))
  170. sum=(sum+aib[i]+MOD)%MOD;
  171. return sum;
  172.  
  173. }
  174. int main()
  175. {
  176. fin >> n >> k >> m;
  177. for (int i = 1; i<=n; ++i)
  178. fin >> v[i];
  179. for (int i = 1; i<=m; ++i)
  180. {
  181. fin >> a[i].f.s >> a[i].f.f;
  182. a[i].s = i;
  183. }
  184. sort(a+1,a+m+1);
  185. int j = 1;
  186. for (int i = 1; i<=m; ++i)
  187. {
  188. for (; j<=a[i].f.f ; ++j)
  189. {
  190. if (ok[v[j]]!=0)
  191. update(ok[v[j]],-v[j]);
  192. update(j,v[j]);
  193. ok[v[j]] = j;
  194. }
  195. sol[a[i].s] = (query(a[i].f.f) - query(a[i].f.s-1)+MOD)%MOD;
  196. }
  197. for (int i = 1; i<=m; ++i)
  198. fout << sol[i] << '\n';
  199. return 0;
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement