Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstring>
- #include <unordered_map>
- using namespace std;
- int a[8001];
- int main() {
- int n, q; scanf("%d%d", &n, &q);
- int all = (n * (n + 1)) >> 1;
- unordered_map<int, bool> exists;
- for(int i = 0; i < n; i++) { scanf("%d", a + i); exists[a[i]] = true; }
- int elems = exists.size();
- int *sums = new int[elems << 1];
- while(q--) {
- int x, y, sum = elems, count = 0; scanf("%d%d", &x, &y);
- if(x == y || !(exists[x] || exists[y])) { printf("%d\n", all); continue; }
- memset(sums, 0, (elems << 1) * sizeof(int));
- for(int i = 0; i < n; i++) {
- int ai = a[i];
- if(ai == x) {
- sum++;
- } else if(ai == y) {
- sum--;
- }
- int sumsum = sums[sum];
- if(sum == elems) { count++; }
- if(sumsum) { count += sumsum; }
- sums[sum]++;
- }
- printf("%d\n", count);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement