题意:查询的是区间内每个数出现次数的平方×该数值的和。

分析:虽然是道莫队裸体,但是姿势不对就会超时。答案可能爆int,所以要开long long 存答案。一开始的维护操作,我先在res里减掉了a[pos]*cnt[a[pos]]*cnt[a[pos]],将cnt[a[pos]]+1,再将乘积加回。其实根据数学原理,K^2和(K+1)^2差值是2K+1,那么其实每次更新时只要加上或减去a[pos]*(2*cnt[pos]+1)即可,这样更高效。

#include<bits/stdc++.h>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long LL;
const int maxn =2e5+;
const int maxv = 1e6+;
int block;
int a[maxn];
int cnt[maxv];
int pos[maxn];
LL ans[maxn],res;
struct Query{
int L,R,id;
bool operator <(const Query &p) {
if(pos[L]==pos[p.L]) return R<p.R;
return pos[L]<pos[p.L];
}
}Q[maxn]; void add(int pos)
{
res+= (LL)(cnt[a[pos]]*+)*a[pos];
cnt[a[pos]]++;
} void del(int pos)
{
cnt[a[pos]]--;
res-= (LL)(cnt[a[pos]]*+)*a[pos];
} //#define LOCAL
int main()
{
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
int N,M,K,u,v,k;
while(scanf("%d%d",&N,&M)==){
block = ceil(sqrt(1.0*N));
memset(cnt,,sizeof(cnt));
for(int i=;i<=N;++i){
scanf("%d",&a[i]);
pos[i]= i /block;
}
for(int i=;i<=M;++i){
scanf("%d%d",&Q[i].L,&Q[i].R);
Q[i].id = i;
}
sort(Q+,Q+M+);
res=;
int curL=,curR=;
for(int i=;i<=M;++i){
while(curL>Q[i].L) add(--curL);
while(curR<Q[i].R) add(++curR);
while(curL<Q[i].L) del(curL++);
while(curR>Q[i].R) del(curR--);
ans[Q[i].id]= res;
}
for(int i=;i<=M;++i)
printf("%lld\n",ans[i]);
}
return ;
}

最新文章

  1. Mybatis框架的模糊查询(多种写法)、删除、添加(四)
  2. 最小生成树 prime poj1287
  3. 破壳漏洞利用payload—shellshock in the wild
  4. svg path详解
  5. Python的禅,“提姆彼得斯”说的非常有道理道出了这门编程语言的真谛!
  6. 01:Geoserver发布shapfile,中文字段乱码问题
  7. struts2:异常处理
  8. iOS 之美:iOS Delegate 使用五步曲
  9. HDU 5040 Instrusive(BFS+优先队列)
  10. WebSocket协议
  11. 【Ecstore2.0】计划任务/队列/导入导出 的执行问题
  12. SEO-搜索引擎高级搜索指令
  13. PHP 算法
  14. 银联在线 网关支付 (JAVA版)
  15. HIS系统结算后,没有更新单据状态为“已结算”
  16. 27.Docker集群部署
  17. docker pull centos慢问题的解决方案
  18. HDU-1459.非常可乐(BFS )
  19. LWIP裸机环境下实现TCP与UDP通讯(转)
  20. 转:实现OC与JS的简易交互

热门文章

  1. C语言 函数指针一(函数指针的定义)
  2. python 2个版本如何共存
  3. java web学习笔记-Servlet篇
  4. 【BZOJ】3016: [Usaco2012 Nov]Clumsy Cows(贪心)
  5. asp.net发送邮件带格式(本demo发送验证码)
  6. (转)Unity笔记之编辑器(CurveField、DoubleField、EnumMaskField、EnumPopup) ... ...
  7. linux 安装php 然后跟nginx整合
  8. 笔试面试的路上——努力ing
  9. Django从无到有的艰苦历程
  10. jQuery初始化$(function() { }