热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Codeforces86DPowerfularray(莫队)

题目链接:http:codeforces.comproblemsetproblem86D题目:Anarrayofpositiveintegers a1,?a2,?,?an i

题目链接:http://codeforces.com/problemset/problem/86/D

题目:

An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary subarray al, al + 1..., ar, where 1 ≤ l ≤ r ≤ n. For every positive integer s denote by Ks the number of occurrences of s into the subarray. We call the power of the subarray the sum of products Ks·Ks·s for every positive integer s. The sum contains only finite number of nonzero summands as the number of different values in the array is indeed finite.

You should calculate the power of t given subarrays.

Input

First line contains two integers n and t (1 ≤ n, t ≤ 200000) — the array length and the number of queries correspondingly.

Second line contains n positive integers ai (1 ≤ ai ≤ 106) — the elements of the array.

Next t lines contain two positive integers lr (1 ≤ l ≤ r ≤ n) each — the indices of the left and the right ends of the corresponding subarray.

Output

Output t lines, the i-th line of the output should contain single positive integer — the power of the i-th query subarray.

Please, do not use %lld specificator to read or write 64-bit integers in C++. It is preferred to use cout stream (also you may use %I64d).

Examples
input
Copy
3 2
1 2 1
1 2
1 3
output
3
6
input
Copy
8 3
1 1 2 2 1 3 1 1
2 7
1 6
2 7
output
20
20
20
Note

Consider the following array (see the second sample) and its [2, 7] subarray (elements of the subarray are colored):

技术分享图片
Then K1 = 3, K2 = 2, K3 = 1, so the power is equal to 3^2·1 + 2^2·2 + 1^2·3 = 20.

题意:给出一个由n个正整数形成的数组,t次询问,每次询问一个区间[l,r]内所有 K^2*a的和,K为数a在区间内出现的次数。

题解:更改下add和del即可。add的话(k+1)^2-k^2=2k+1,增加2k+1个a[i];del的话k^2-(k-1)^2=2k-1,减少2k-1个a[i]。

 1 #include 
 2 #include 
 3 #include 
 4 using namespace std;
 5 
 6 typedef long long LL;
 7 const int N=1e6+10;
 8 struct node{
 9     int l,r,id;
10 }Q[N];
11 
12 LL a[N],ans[N],cnt[N];
13 int BLOCK;
14 bool cmp(node x,node y){
15     if(x.l/BLOCK==y.l/BLOCK) return x.r<y.r;
16     return x.l/BLOCKBLOCK;
17 }
18 
19 int n,m;
20 LL Ans=0;
21 
22 void add(int x){
23     Ans+=a[x]*(cnt[a[x]]*2+1);
24     cnt[a[x]]++;
25 }
26 
27 void del(int x){
28     Ans-=a[x]*(cnt[a[x]]*2-1);
29     cnt[a[x]]--;
30 }
31 
32 int main(){
33     scanf("%d%d",&n,&m);
34     BLOCK=sqrt(n);
35     for(int i=1;i<=n;i++){
36         scanf("%lld",&a[i]);
37     }
38     for(int i=1;i<=m;i++){
39         scanf("%d%d",&Q[i].l,&Q[i].r);
40         Q[i].id=i;
41     }
42     sort(Q+1,Q+1+m,cmp);
43     int L=1,R=0;
44     for(int i=1;i<=m;i++){
45         while(L<Q[i].l){
46             del(L);
47             L++;
48         }
49         while(L>Q[i].l){
50             L--;
51             add(L);
52         }
53         while(R<Q[i].r){
54             R++;
55             add(R);
56         }
57         while(R>Q[i].r){
58             del(R);
59             R--;
60         }
61         ans[Q[i].id]=Ans;
62     }
63     for(int i=1;i<=m;i++)
64     printf("%lld\n",ans[i]);
65     return 0;
66 }

Codeforces 86D Powerful array(莫队)


推荐阅读
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 解决 Windows Server 2016 网络连接问题
    本文详细介绍了如何解决 Windows Server 2016 在使用无线网络 (WLAN) 和有线网络 (以太网) 时遇到的连接问题。包括添加必要的功能和安装正确的驱动程序。 ... [详细]
  • 在使用Eclipse进行调试时,如果遇到未解析的断点(unresolved breakpoint)并显示“未加载符号表,请使用‘file’命令加载目标文件以进行调试”的错误提示,这通常是因为调试器未能正确加载符号表。解决此问题的方法是通过GDB的`file`命令手动加载目标文件,以便调试器能够识别和解析断点。具体操作为在GDB命令行中输入 `(gdb) file `。这一步骤确保了调试环境能够正确访问和解析程序中的符号信息,从而实现有效的调试。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
author-avatar
520sweet跃_322
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有