CF86D
题解:
莫队分块
分块大小为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的更多相关文章
- 【题解】Luogu CF86D Powerful array
原题传送门 裸的莫队啊,我博客里有对莫队较详细的介绍 这道题很简单,可以说是裸的模板 但是如何在已有的值上进行操作? 小学生应该都知道 那么转移就超级简单了qaq inline void add(re ...
- CF86D Powerful array
题意翻译 题意:给出一个n个数组成的数列a,有t次询问,每次询问为一个[l,r]的区间,求区间内每种数字出现次数的平方×数字的值 的和. 输入:第一行2个正整数n,t. 接下来一行n个正整数,表示数列 ...
- 「CF86D」Powerful array 解题报告
题面 给出一个\(n\)个数组成的数列\(a\),有\(t\)次询问,每次询问为一个\([l,r]\)的区间,求区间内每种数字出现次数的平方×数字的值 的和 思路: 直接上莫队咯 然后就T了 没学过莫 ...
随机推荐
- stark - 数据列表
一.效果图 二.数据列表 知识点: 完成(list_display)(list_display_links) 1.根据str,拿字段对象,取中文 val = self.model._meta.get_ ...
- uchome 常用函数示例
一.inserttable //添加数据 //前3个参数 $tablename插入的表名称 $insertsqlarr数据数组 $returnid是否返回插入ID function inserttab ...
- 2018 Multi-University Training Contest 2 Solution
A - Absolute 留坑. B - Counting Permutations 留坑. C - Cover 留坑. D - Game puts("Yes") #include ...
- 20155334 2016-2017-2 《Java程序设计》第七周学习总结
20155334 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第十二章:Lambda 认识Lammbda语法 Lambda去可以重复,符合DRY原则,而且 ...
- java提升路线
转载自:http://blog.csdn.net/a151296/article/details/43658853 作为一名即将从事java开发的应届毕业生,迷茫中,转载此篇文章,作为提升自己的学习方 ...
- 《Java入门第二季》第一章 类和对象
什么是类和对象 如何定义 Java 中的类 如何使用 Java 中的对象 Java中的成员变量和局部变量1.成员变量:在类中定义,描述构成对象的组件. 2.局部变量:在类的方法中,用于临时保存数据. ...
- c++第二十二天
p120~p124: 表达式 1.表达式由一个或者多个运算对象组成. 2.最简单的表达式是字面值和变量. 3.一元运算符作用于一个运算对象,二元则作用于两个.一个运算符到底是几元由上下文决定. 4.重 ...
- 用 Python 和 OpenCV 检测图片上的条形码(转载)
原文地址:http://python.jobbole.com/80448/ 假设我们要检测下图中的条形码: # load the image and convert it to grayscale 1 ...
- c++语言中的遍历
原文地址:http://www.cnblogs.com/xylc/p/3653036.html 随着C++11标准的出现,C++标准添加了许多有用的特性,C++代码的写法也有比较多的变化. vecto ...
- 2017-2018-1 JaWorld 团队作业--冲刺7
2017-2018-1 JaWorld 团队作业--冲刺7 冲刺博客 冲刺1 冲刺2 冲刺3 冲刺4 冲刺5 项目完成情况 存在的问题 存在的问题是敌机只设置了一种,没能实现多种敌机的游戏设置. 界面 ...