题解:

莫队分块

分块大小为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. stark - 数据列表

    一.效果图 二.数据列表 知识点: 完成(list_display)(list_display_links) 1.根据str,拿字段对象,取中文 val = self.model._meta.get_ ...

  2. uchome 常用函数示例

    一.inserttable //添加数据 //前3个参数 $tablename插入的表名称 $insertsqlarr数据数组 $returnid是否返回插入ID function inserttab ...

  3. 2018 Multi-University Training Contest 2 Solution

    A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...

  4. 20155334 2016-2017-2 《Java程序设计》第七周学习总结

    20155334 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章:Lambda 认识Lammbda语法 Lambda去可以重复,符合DRY原则,而且 ...

  5. java提升路线

    转载自:http://blog.csdn.net/a151296/article/details/43658853 作为一名即将从事java开发的应届毕业生,迷茫中,转载此篇文章,作为提升自己的学习方 ...

  6. 《Java入门第二季》第一章 类和对象

    什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...

  7. c++第二十二天

    p120~p124: 表达式 1.表达式由一个或者多个运算对象组成. 2.最简单的表达式是字面值和变量. 3.一元运算符作用于一个运算对象,二元则作用于两个.一个运算符到底是几元由上下文决定. 4.重 ...

  8. 用 Python 和 OpenCV 检测图片上的条形码(转载)

    原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...

  9. c++语言中的遍历

    原文地址:http://www.cnblogs.com/xylc/p/3653036.html 随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化. vecto ...

  10. 2017-2018-1 JaWorld 团队作业--冲刺7

    2017-2018-1 JaWorld 团队作业--冲刺7 冲刺博客 冲刺1 冲刺2 冲刺3 冲刺4 冲刺5 项目完成情况 存在的问题 存在的问题是敌机只设置了一种,没能实现多种敌机的游戏设置. 界面 ...