题目

You are given an array with n integers a1, a2, ..., an, and q queries to answer.

Each query consists of four integers l1, r1, l2 and r2. Your task is to count the number of pairs of indices (i, j) satisfying the following conditions:

ai = aj

l1 ≤ i ≤ r1

l2 ≤ j ≤ r2

Input

The first line of the input contains an integer n (1 ≤ n ≤ 50 000) — the size of the given array.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ n).

The third line contains an integer q (1 ≤ q ≤ 50 000) — the number of queries.

Each of the next q lines contains four integers l1, r1, l2, r2 (1 ≤ l1 ≤ r1 ≤ n, 1 ≤ l2 ≤ r2 ≤ n), describing one query.

Output

For each query count the number of sought pairs of indices (i, j) and print it in a separate line.

Examples

Input

7

1 5 2 1 7 2 2

8

1 3 4 5

2 3 5 7

1 4 3 7

2 6 4 7

1 6 2 5

3 3 6 7

4 5 1 4

2 3 4 5

Output

1

2

5

6

6

2

2

0

题目:

您将获得一个包含n个整数a1,a2,...,an和q查询的数组。

每个查询由四个整数l1,r1,l2和r2组成。您的任务是计算满足以下条件的索引对(i,j)的数量:

$ a_i = a_j $

L1 ≤ i ≤ R1

L2 ≤ j ≤ R2

输入

输入的第一行包含一个整数n(1≤N≤50 000) -给定阵列的大小。

第二行包含n个整数a1,a2,...,a(1≤ai≤n)。

第三行包含一个整数q(1≤q≤50000) - 查询数。

接下来的q行中的每一行包含四个整数l1,r1,l2,r2(1≤l1≤r1≤n,1≤l2≤r2≤n),描述一个查询。

输出

对于每个查询计数所寻求的索引对(i,j)的数量,并将其打印在单独的行中。

示例输入

7
1 5 2 1 7 2 2
8
1 3 4 5
2 3 5 7
1 4 3 7
2 6 4 7
1 6 2 5
3 3 6 7
4 5 1 4
2 3 4 5

示例输出

1
2
5
6
6
2
2
0

仔细观察题目我们不难发现这题我们需要维护两个区间内元素的出现次数

嗯?这不是裸裸的莫队吗?等等,两个\(50000\)的区间,我不敲时谁敲时?

这谁做得出啊??干脆维护一个区间算了,暴力枚举第二个区间算了!!

于是某年某月某日某蒟蒻以2000毫秒的好成绩卡了过去:

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set> #define db double
#define inf 0x7fffffff
#define rg register int using namespace std; struct su{
int l,r,ll,rr,t;
}k[50001]; long long now;
int z[50001];
int s[50001];
int tot[50001];
int tot2[50001];
long long ans[50001];
int n,m,q,f,l=1,r,ll=1,rr; inline int qr(){
char ch;
while((ch=getchar())<'0'||ch>'9');
int res=ch^48;
while((ch=getchar())>='0'&&ch<='9')
res=res*10+(ch^48);
return res;
} inline bool cmp(su x,su y){
return z[x.l]==z[y.l]?x.r<y.r:x.l<y.l;
} inline void add(int x,int y){
now-=(long long)tot2[x]*tot[x];
tot[x]+=y;
now+=(long long)tot2[x]*tot[x];
} inline void add2(int x,int y){
now-=(long long)tot[x]*tot2[x];
tot2[x]+=y;
now+=(long long)tot[x]*tot2[x];
} int main(){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
n=qr();
f=sqrt(n-1)+1;
for(rg i=1;i<=n;++i) s[i]=qr();
for(rg i=1,j=1;i<=n;++i)
z[i]=i%f==0?j++:j;
m=qr();
for(rg i=1;i<=m;++i){
k[i].l=qr();
k[i].r=qr();
k[i].ll=qr();
k[i].rr=qr();
k[i].t=i;
}
sort(k+1,k+m+1,cmp);
for(rg i=1;i<=m;++i){
while(l<k[i].l)add(s[l],-1),++l;
while(k[i].l<l)add(s[l-1],1),--l;
while(r<k[i].r)add(s[r+1],1),++r;
while(k[i].r<r)add(s[r],-1),--r;
while(ll<k[i].ll)add2(s[ll],-1),++ll;
while(k[i].ll<ll)add2(s[ll-1],1),--ll;
while(rr<k[i].rr)add2(s[rr+1],1),++rr;
while(k[i].rr<rr)add2(s[rr],-1),--rr;
ans[k[i].t]=now;
}
for(rg i=1;i<=m;++i)
printf("%lld\n",ans[i]);
return 0;
}

Strange Queries(莫队)的更多相关文章

  1. CFGym101138D Strange Queries 莫队/分块

    正解:莫队/分块 解题报告: 传送门 ummm这题耗了我一天差不多然后我到现在还没做完:D 而同机房的大佬用了一个小时没有就切了?大概这就是大佬和弱鸡的差距趴QAQ 然后只是大概写下思想好了因为代码我 ...

  2. XOR Queries(莫队+trie)

    题目链接: XOR Queries 给出一个长度为nn的数组CC,回答mm个形式为(L, R, A, B)(L,R,A,B)的询问,含义为存在多少个不同的数组下标k \in [L, R]k∈[L,R] ...

  3. Sona && Little Elephant and Array && Little Elephant and Array && D-query && Powerful array && Fast Queries (莫队)

    vjudge上莫队专题 真的是要吐槽自己(自己的莫队手残写了2个bug) s=sqrt(n) 是元素的个数而不是询问的个数(之所以是sqrt(n)使得左端点每个块左端点的范围嘴都是sqrt(n)) 在 ...

  4. CodeForces 375D Tree and Queries 莫队||DFS序

    Tree and Queries 题意:有一颗以1号节点为根的树,每一个节点有一个自己的颜色,求出节点v的子数上颜色出现次数>=k的颜色种类. 题解:使用莫队处理这个问题,将树转变成DFS序区间 ...

  5. cf375D. Tree and Queries(莫队)

    题意 题目链接 给出一棵 n 个结点的树,每个结点有一个颜色 c i . 询问 q 次,每次询问以 v 结点为根的子树中,出现次数 ≥k 的颜色有多少种.树的根节点是1. Sol 想到了主席树和启发式 ...

  6. [Codeforces375D]Tree and Queries(莫队算法)

    题意:给定一棵树,每个节点有颜色,对于每个询问(u,k)询问以u为根节点的子树下有多少种颜色出现次数>=k 因为是子树,跟dfs序有关,转化为一段区间,可以用莫队算法求解 直接用一个数组统计出现 ...

  7. Gym101138D Strange Queries/BZOJ5016 SNOI2017 一个简单的询问 莫队、前缀和、容斥

    传送门--Gym 传送门--BZOJ THUWC2019D1T1撞题可还行 以前有些人做过还问过我,但是我没有珍惜,直到进入考场才追悔莫及-- 设\(que_{i,j}\)表示询问\((1,i,1,j ...

  8. LightOJ 1188 Fast Queries(简单莫队)

    1188 - Fast Queries    PDF (English) Statistics Forum Time Limit: 3 second(s) Memory Limit: 64 MB Gi ...

  9. CodeForces 376F Tree and Queries(假·树上莫队)

    You have a rooted tree consisting of n vertices. Each vertex of the tree has some color. We will ass ...

随机推荐

  1. C#Dictionary使用记录

    一.区别 在工作中经常遇到C#数组.ArrayList.List.Dictionary存取数据,其区别和优劣势为: 初始化 数组: int[] buff = new int[6]; ArrayList ...

  2. A Zero Flow Entry Expiration Timeout P4 Switch

    文章名称:A Zero Flow Entry Expiration Timeout P4 Switch 零流表项期满超时P4交换机 发表时间:2018 期刊来源:SOSR ABSTRACT (摘要) ...

  3. Smart Disk -- proposed by Liyuan Liu

    Need 如今,照相渐渐得成为了人们的日常举动.几乎所有的人都在随时随地得照相.手机,相机,平板越来越多的设备对照相进行了支持,同时, 照片以一种前所未有的速度渐渐淹没我们的文件夹.而寻找照片,对照片 ...

  4. Resharper简单安装及代码覆盖率的测试

    Resharper简单安装及代码覆盖率的测试 测试环境:VS 2015 专业版 一.下载Resharper 官方链接:https://www.jetbrains.com/resharper/ 点击下载 ...

  5. Alpha冲刺第10天

    Alpha第10天 1.团队成员 郑西坤 031602542 (队长) 陈俊杰 031602504 陈顺兴 031602505 张胜男 031602540 廖钰萍 031602323 雷光游 0316 ...

  6. Spring源码学习:DefaultAopProxyFactory

    /* * Copyright 2002-2015 the original author or authors. * * Licensed under the Apache License, Vers ...

  7. [转帖]PG里面的Citus简介----找时间学习一下.

    1. Citus是什么 是PostgreSQL的扩展,可以同PG一同安装,之后通过SQL命令加入到数据库中. [相关操作] ? 1 2 #创建Citus扩展: CREATE EXTENSION cit ...

  8. Oracle 12c 之前的版本路线图

  9. Delphi用户登录窗口框架

    经常看到一些新手在CSDN上问登录窗口如何写,也看到N多人form1.show/form1.create/…中做form2.show之类.实在看不下去了.这种写法实在不是很好,于是还是把自己理解的登录 ...

  10. poj3368 Frequent values(线段树)

    Description You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In ad ...