传送门

题意:

题解:

原本想着使用暴力方法:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<map>
6 using namespace std;
7 typedef long long ll;
8 const int maxn=1e5+5;
9 const int mod=26;
10 int v[maxn],w[maxn];
11 int main()
12 {
13 int n,m;
14 scanf("%d%d",&n,&m);
15 for(int i=1;i<=n;++i)
16 {
17 scanf("%d",&v[i]);
18 //sum[i]=sum[i-1]+v[i];
19 }
20 while(m--)
21 {
22 int l,r,ans=0;
23 memset(w,0,sizeof(w));
24 scanf("%d%d",&l,&r);
25 for(int i=l;i<=r;++i)
26 {
27 ans=ans+w[v[i]]*v[i];
28 w[v[i]]++;
29 ans=ans+w[v[i]]*v[i];
30 }
31 printf("%d\n",ans);
32 }
33 return 0;
34 }

但是对每一次的询问都对应一次区间[l,r]的遍历,最大复杂度就是1e5*1e5(还以为数据会水过)

这个时候就要使用莫队算法(优雅的暴力)来解决了

莫队算法就是先分块,再所有询问的区间按某种方式进行排序,一个一个区间的找结果。具体看代码

以多少分一块看具体情况,这个不固定

代码:

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 #include<map>
6 using namespace std;
7 typedef long long ll;
8 const int maxn=1e5+5;
9 const int mod=26;
10 const int block=300;
11 ll w[maxn],ans,v[maxn],sum[maxn];
12 struct shudui
13 {
14 ll l,r,id;
15 bool operator<(const shudui x)const //<号代表从大到小排序
16 {
17 if(l/block==x.l/block)
18 return r<x.r;
19 else return l/block<x.l/block;
20 }
21 }m[maxn];
22 ll n,k;
23 void add(ll i)
24 {
25 ans=ans+w[v[i]]*v[i]; //w存这个数字出现的次数
26 w[v[i]]++;
27 ans=ans+w[v[i]]*v[i]; //如果一个数字出先2次,那么可以第一次遇见它只加上它
28 } //再一次遇见再加一次。比如3出现2次
29 void del(ll i) //第一次ans=3
30 {
31 ans=ans-w[v[i]]*v[i]; //第二次ans+3+w[3]*3 ==3*2+3*2(最后的结果)
32 w[v[i]]--;
33 ans=ans-(w[v[i]]*v[i]);
34 }
35 int main()
36 {
37 scanf("%lld%lld",&n,&k);
38 for(ll i=1;i<=n;++i)
39 {
40 scanf("%lld",&v[i]);
41 }
42 for(ll i=1;i<=k;++i)
43 {
44 scanf("%lld%lld",&m[i].l,&m[i].r);
45 m[i].id=i;
46 }
47 sort(m+1,m+1+k);
48 ll l=0,r=0;
49 ans=0;
50 for(ll i=1;i<=k;++i)
51 {
52 while(l<m[i].l)
53 del(l),l++;
54 while(l>m[i].l)
55 add(--l);
56 while(r>m[i].r)
57 del(r),r--;
58 while(r<m[i].r)
59 add(++r);
60 sum[m[i].id]=ans;
61 }
62 for(ll i=1;i<=k;++i)
63 {
64 printf("%lld\n",sum[i]);
65 }
66 return 0;
67 }

牛客小白月赛17 G 区间求和的更多相关文章

  1. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  2. 牛客小白月赛5 I - 区间

    看到一份不错的操作..... 链接:https://www.nowcoder.com/acm/contest/135/I 来源:牛客网 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a, ...

  3. 牛客小白月赛2 G 文 【模拟】

    链接:https://www.nowcoder.com/acm/contest/86/G来源:牛客网 题目描述 Sεlιнα(Selina) 开始了新一轮的男友海选.她要求她的男友要德智体美劳样样都全 ...

  4. 牛客小白月赛6 G 指纹锁 set的自动排序 模板

    链接:https://www.nowcoder.com/acm/contest/136/G来源:牛客网 题目描述     HA实验有一套非常严密的安全保障体系,在HA实验基地的大门,有一个指纹锁.   ...

  5. 牛客网 牛客小白月赛2 G.文

    G.文 链接:https://www.nowcoder.com/acm/contest/86/G 这个题wa了一发,有点智障,浮点数,式子里面要*1.0,忘了,然后wa了,改了就过了(脑子有坑) 代码 ...

  6. 牛客小白月赛17 A 小sun的假期

    传送门 题意: 第一行两个数n,m,代表总共有n天,m个安排.接下来有m行,每行是一个安排l,r,代表从第l天到第r天,小sun有安排了.安排可能会重复. 小 sun 非常喜欢放假,尤其是那种连在一起 ...

  7. 牛客小白月赛1 G あなたの蛙は旅⽴っています【DP】

    题目链接 https://www.nowcoder.com/acm/contest/85/G 思路 按照题解上的方式 存取数据 然后DP一下 就可以了 AC代码 #include <cstdio ...

  8. 牛客小白月赛5 I 区间 (interval) 【前缀和】

    链接:https://www.nowcoder.com/acm/contest/135/I 题目描述 Apojacsleam喜欢数组. 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次 ...

  9. 牛客小白月赛1 G あなたの蛙は旅⽴っています【图存储】【DP】

    题目链接:https://www.nowcoder.com/acm/contest/85/G 思路: DP 空间可以优化成一维的, 用一维数组的 0 号单元保存左斜对角的值即可. 存图这里真不好理解 ...

随机推荐

  1. Python_列表(list)

    list()类中的提供的操作 1.索引取值 li = [11,22,33,44,55] v1 = li[3] print(li[2]) #索引取出33 print(v1) #索引取出44 print( ...

  2. requests顺序执行实现

    多步请求封装,执行完一个用例 def requests(self,step_info): request_type =step_info['请求方式'] if request_type==" ...

  3. CSS 奇思妙想边框动画

    今天逛博客网站 -- shoptalkshow,看到这样一个界面,非常有意思: 觉得它的风格很独特,尤其是其中一些边框. 嘿嘿,所以来一篇边框特辑,看看运用 CSS,可以在边框上整些什么花样. bor ...

  4. 【Python】简单的脚本,轻松批量修改文件名称

    使用python脚本,批量修改文件夹名称 先创建一些没用的案例文件 import os #创建新文件夹 dir = os.makedirs('D:\\SomeThing\\testfile') #将文 ...

  5. 华为刘腾:华为终端云Cassandra运维实践分享

    点击此处观看完整活动视频 各位线上的嘉宾朋友大家好,我是来自华为消费者BG云服务部的刘腾,我今天给大家分享的主题是华为终端云Cassandra运维实践.和前面王峰老师提到的Cassandra在360中 ...

  6. Java多线程基础知识笔记(持续更新)

    多线程基础知识笔记 一.线程 1.基本概念 程序(program):是为完成特定任务.用某种语言编写的一组指令的集合.即指一段静态的代码,静态对象. 进程(process):是程序的一次执行过程,或是 ...

  7. 基于HBuilderX+UniApp+ColorUi+UniCloud 优宝库 开发实战(一)

    1.   优宝库介绍 优宝库是基于阿里妈妈.淘宝联盟 淘宝商品Api,前端使用HBuilderX + UniApp + ColorUi,后端采用UniClound 精选淘宝商品进行推荐的App程序.下 ...

  8. 【UltraISO】中文破解版

    下载链接:https://cn.ultraiso.net/uiso9_cn.exe简体中文版专用:   注册名:Guanjiu    注册码:A06C-83A7-701D-6CFC多国语言版专用:   ...

  9. 解决PHP无法监听9000端口问题/502错误解决办法

    问题背景 配置nginx+php服务的时候,发现网站能打开html,打开php文件就显示502,一般这个是php没启动啊啥的导致不能正常解析php文件. 原因分析 因为nginx解析php文件是交给f ...

  10. 提取当前文件夹下的所有文件名.bat(Windows批处理文件)

    @echo off dir /s/b *.* > 文件名.txt exit