莫队,每次询问的是两个区间,就把区间拆开,分开来算就好了。

借鉴了rank1大佬的玄学排询问的姿势。

#include<bits/stdc++.h>
#define N 50010
typedef long long ll;
using namespace std;
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
int c1[N],c2[N],a[N],n,m,cnt;
struct Query{
int l,r,id;
bool operator < (const Query &ths) const {
if(l/!=ths.l/) return l<ths.l;
if(l/&) return r>ths.r;
else return r<ths.r;
}
}q[N<<];
ll ans[N],tot=,Ans=;
int main(){
n=read();for(int i=;i<=n;i++)a[i]=read();
m=read();
for(int i=;i<=m;i++){
int l1=read(),r1=read(),l2=read(),r2=read();
q[++cnt]=(Query){r1,r2,i};
if(l1>)q[++cnt]=(Query){l1-,r2,-i};
if(l2>)q[++cnt]=(Query){l2-,r1,-i};
if(l1>&&l2>)q[++cnt]=(Query){l1-,l2-,i};
}
for(int i=;i<=cnt;i++)if(q[i].l>q[i].r)swap(q[i].l,q[i].r);
sort(q+,q+cnt+);
int l=,r=;c1[a[]]++;
for(int i=;i<=cnt;i++){
while(r<q[i].r)r++,Ans+=c1[a[r]],c2[a[r]]++;
while(l<q[i].l)l++,Ans+=c2[a[l]],c1[a[l]]++;
while(r>q[i].r)Ans-=c1[a[r]],c2[a[r]]--,r--;
while(l>q[i].l)Ans-=c2[a[l]],c1[a[l]]--,l--;
if(q[i].id<) ans[-q[i].id]-=Ans;
else ans[q[i].id]+=Ans;
}
for(int i=;i<=m;i++)printf("%lld\n",ans[i]);
}

最新文章

  1. 读《编写可维护的JavaScript》第五章总结
  2. 快速理解Docker - 容器级虚拟化解决方案
  3. shell脚本中的[]/[[]]区别
  4. ASP.NET MVC 中使用 AjaxFileUpload 插件时,上传图片后不能显示(预览)
  5. C++读入两个参数
  6. forms
  7. PHP 语言需要避免的 10 大误区
  8. PL SQL Developer 使用总结
  9. 关于 mod_python
  10. 【80端口占用】win7下80端口被(Pid=4)占用的解决方法
  11. openFileDialog与saveFileDialog的使用
  12. 提交服务器 post get
  13. hdu 1806 Frequent values 线段树
  14. 分析Cocos2d-x横版ACT手游源 1、登录
  15. python利用scrapy框架爬取起点
  16. hdu1814 Peaceful Commission
  17. webpack加载postcss,以及autoprefixer的loader
  18. JMeter之自动重定向和跟随重定向的区别
  19. RedHat7.之.图形化切换
  20. Solution about MB STAR C4, MB STAR C5 Update and can not test vehicles problems

热门文章

  1. 【bzoj1369】[Baltic2003]Gem 树形dp
  2. (一)MySQL学习笔记
  3. wmware的vmnet0、vmnet1、vmnet8
  4. 923c C. Perfect Security
  5. BZOJ2821:作诗——题解
  6. bzoj3680: 吊打XXX(模拟退火)
  7. ContestHunter暑假欢乐赛 SRM 02
  8. [IOI2007]Miners 矿工配餐
  9. 高效率JavaScript代码的编写技巧
  10. Leetcode 138. 复制带随机指针的链表