题解:

莫队分块

分块大小为sqrt(n)

代码:

#include<bits/stdc++.h>
using namespace std;
const int N=;
typedef long long ll;
ll a[N],cnt[N*],ans[N],res;
int n,t,L,R;
struct node{int x,y,l,p;}q[N];
int cmp(const node &x,const node &y)
{
if (x.l==y.l)return x.y<y.y;
return x.l<y.l;
}
void query(int x, int y, int flag)
{
if (flag)
{
for (int i=x;i<L;i++)
{
res+=((cnt[a[i]]<<)+)*a[i];
cnt[a[i]]++;
}
for (int i=L;i<x;i++)
{
cnt[a[i]]--;
res-=((cnt[a[i]]<<)+)*a[i];
}
for (int i=y+;i<=R;i++)
{
cnt[a[i]]--;
res-=((cnt[a[i]]<<)+)*a[i];
}
for (int i=R+;i<=y;i++)
{
res+=((cnt[a[i]]<<)+)*a[i];
cnt[a[i]]++;
}
}
else
for (int i=x;i<=y;i++)
{
res+=((cnt[a[i]]<<)+)*a[i];
cnt[a[i]]++;
}
L=x;R=y;
}
int main()
{
scanf("%d%d",&n,&t);
for (int i=;i<=n;i++)scanf("%I64d", &a[i]);
int block_size=sqrt(n);
for (int i=;i<t;i++)
{
scanf("%d%d",&q[i].x,&q[i].y);
q[i].l=(q[i].x-)/block_size;
q[i].p=i;
}
sort(q,q+t,cmp);
memset(cnt,,sizeof(cnt));
res=;
for (int i=;i<t;i++)
{
query(q[i].x,q[i].y,i);
ans[q[i].p]=res;
}
for (int i=;i<t;i++)printf("%I64d\n",ans[i]);
return ;
}

CF86D的更多相关文章

  1. 【题解】Luogu CF86D Powerful array

    原题传送门 裸的莫队啊,我博客里有对莫队较详细的介绍 这道题很简单,可以说是裸的模板 但是如何在已有的值上进行操作? 小学生应该都知道 那么转移就超级简单了qaq inline void add(re ...

  2. CF86D Powerful array

    题意翻译 题意:给出一个n个数组成的数列a,有t次询问,每次询问为一个[l,r]的区间,求区间内每种数字出现次数的平方×数字的值 的和. 输入:第一行2个正整数n,t. 接下来一行n个正整数,表示数列 ...

  3. 「CF86D」Powerful array 解题报告

    题面 给出一个\(n\)个数组成的数列\(a\),有\(t\)次询问,每次询问为一个\([l,r]\)的区间,求区间内每种数字出现次数的平方×数字的值 的和 思路: 直接上莫队咯 然后就T了 没学过莫 ...

随机推荐

  1. 小米范工具系列之五:小米范WEB口令扫描器

    最新版本1.2,下载地址:http://pan.baidu.com/s/1c1NDSVe  文件名 webcracker,请使用java1.8运行 小米范WEB口令扫描器的主要功能是批量扫描web口令 ...

  2. centos vim编辑器 第八节课

    centos  vim编辑器  第八节课 其他编辑器: nanogeditemacs 腾讯云上的vim版本~ VIM - Vi IMproved ~ ~ version 7.4.629 ~ by Br ...

  3. [World Wind学习]22.相机高度和瓦片等级计算

    在这里我们看到判断Lod的级别主要有三个条件: * 1.相机视角范围,视角范围越大,所包含的tileSize就越大 * 2.相机与瓦片距离,距离越远,所包含的tileSize也就越大 * 3.相机视锥 ...

  4. Tdrag

    Tdrag属于拖拽类的一款插件,基于jquery而成,兼容1.4以上版本的jquery,兼容浏览器:chrome.firfox.IE7等以上主流浏览器 插件加载 <script type=&qu ...

  5. ts 绘制多边形

    let bg = this.createBitmapByName("123_png"); this.addChild(bg) bg.x = this.stage.width / 2 ...

  6. SQL group by的使用

    ①定义 "group by" 从字面上理解是根据“by"指定的规则对数据进行分组 ②简单示例 ③group by 中的select字段是受限制的 select指定的字段要 ...

  7. Android开发--取消AsyncTask

    在Android应用开发过程中,为了防止UI线程堵塞,耗时的工作都应该另起一个后台线程来完成,其中AsyncTask就是其中的一种方式.最近在案子中需要“停止/取消”某个AsyncTask,在网上查了 ...

  8. springcloud21---Config-bus实现配置自动刷新

    Pivotal(毕威拓)有VMware和EMC成立的. RabbitMQ是由ERlang(爱立信开发的,面向并发的编程语言),安装RabbitMQ先要安装ERlang. package com.itm ...

  9. opencv-ios开发笔记9 使用透视变换矫正扭曲的图片

    http://blog.csdn.net/baixiaozhe/article/details/51762086 摄像头观察一个矩形的图片时往往只能得到一个扭曲的图片: 原图: 实际情况是摄像头经常从 ...

  10. RESTful源码学习笔记之RPC和 RESTful 什么区别

    REST,即Representational State Transfer的缩写.翻译过来是表现层状态转换.如果一个架构符合REST原则,就称它为RESTful架构.啥叫json-rpc?接口调用通常 ...