Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.98 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstring>
  3. #include <unordered_map>
  4.  
  5. using namespace std;
  6.  
  7. int a[8001];
  8.  
  9. int main() {
  10. int n, q; scanf("%d%d", &n, &q);
  11. int all = (n * (n + 1)) >> 1;
  12. unordered_map<int, bool> exists;
  13. for(int i = 0; i < n; i++) { scanf("%d", a + i); exists[a[i]] = true; }
  14. int elems = exists.size();
  15. int *sums = new int[elems << 1];
  16.  
  17. while(q--) {
  18. int x, y, sum = elems, count = 0; scanf("%d%d", &x, &y);
  19. if(x == y || !(exists[x] || exists[y])) { printf("%d\n", all); continue; }
  20. memset(sums, 0, (elems << 1) * sizeof(int));
  21. for(int i = 0; i < n; i++) {
  22. int ai = a[i];
  23. if(ai == x) {
  24. sum++;
  25. } else if(ai == y) {
  26. sum--;
  27. }
  28.  
  29. int sumsum = sums[sum];
  30. if(sum == elems) { count++; }
  31. if(sumsum) { count += sumsum; }
  32. sums[sum]++;
  33. }
  34.  
  35. printf("%d\n", count);
  36. }
  37.  
  38. return 0;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement