CodeForces - 86D Powerful array(莫队)
题目链接:点击查看
题目大意:给出一个由n个数字组成的数列,再给出m次查询,每次查询要求输出[l,r]中的答案,这个题目的答案为:
假设x为区间[l,r]内的数,出现的次数记为cnt[x],则数x的贡献为cnt[x]^2*x,答案为所有不同数字的贡献
题目分析:莫队模板题,直接套模板就行了,对于每增加一个数,那么答案由a^2变为了(a+1)^2=a^2+2*a+1,增加了2*a+1,减少亦是如此,按照这个规则更改一下add函数和del函数就好了
代码:
#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e6+100;int size,n,m,a[N];LL ans[N],cnt[N];struct query
{int l,r,id;bool operator<(const query& a)const{if(l/size!=a.l/size)return l<a.l;else if((l/size)&1)return r<a.r;elsereturn r>a.r;}
}q[N];LL add(int pos)
{cnt[a[pos]]++;return ((cnt[a[pos]]-1)*2+1)*a[pos];
}LL del(int pos)
{cnt[a[pos]]--;return -((2*cnt[a[pos]]+1)*a[pos]);
}void solve()
{int l=1,r=0;LL sum=0;for(int i=1;i<=m;i++){int ql=q[i].l;int qr=q[i].r;while(l<ql)sum+=del(l++);while(l>ql)sum+=add(--l);while(r<qr)sum+=add(++r);while(r>qr)sum+=del(r--);ans[q[i].id]=sum;}
}int main()
{
// freopen("input.txt","r",stdin);ios::sync_with_stdio(false);cin>>n>>m;size=sqrt(n);for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=m;i++){cin>>q[i].l>>q[i].r;q[i].id=i;} sort(q+1,q+1+m);solve();for(int i=1;i<=m;i++)cout<<ans[i]<<endl;return 0;
}
CodeForces - 86D Powerful array(莫队)相关推荐
- 【打CF,学算法——四星级】CodeForces 86D Powerful array (莫队算法)
[CF简介] 题目链接:CF 86D 题面: D. Powerful array time limit per test 5 seconds memory limit per test 256 meg ...
- CodeForces 86 D Powerful array 莫队
Powerful array 题意:求区间[l, r] 内的数的出现次数的平方 * 该数字. 题解:莫队离线操作, 然后加减位置的时候直接修改答案就好了. 这个题目中发现了一个很神奇的事情,本来数组开 ...
- cf D. Powerful array 莫队算法
D. Powerful array 题意:给定一个序列>>每次查询一个区间>>查询该区间内 出现过的数字*出现的次数的平方 的和 思路:学习莫队的第一题或者说小z的袜子是第一题 ...
- Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队
题目链接:点击传送 D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input ...
- Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队算法
链接: http://codeforces.com/problemset/problem/86/D 题意: 给你一个数组,每次询问一个区间,求对于每个数,算出这个数在这个区间出现的个数的平方再*这个数 ...
- Codeforces D. Powerful array(莫队)
题目描述: Problem Description An array of positive integers a1, a2, ..., an is given. Let us consider it ...
- 莫队算法(普通莫队、带修莫队、树上莫队、不删除莫队)学习笔记【理解+套路/核心代码+例题及题解】
一.理解 我的理解就是巧妙的暴力,利用双指针以及分块思想,巧妙的移动双指针,时间复杂度可以达到O(NlogN). 强推博客:写的又好又全.链接 二.套路 1.普通莫队 [1]核心代码 bool cmp ...
- Powerful array CodeForces - 86D (莫队算法)
An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary subarray al, a ...
- Codeforces 375D - Tree and Queries(dfs序+莫队)
题目链接:http://codeforces.com/contest/351/problem/D 题目大意:n个数,col[i]对应第i个数的颜色,并给你他们之间的树形关系(以1为根),有m次询问,每 ...
最新文章
- mysql一主两从_MySQL 网络延迟参数设置建议
- PyQt5 图形界面 - 配置界面跟随窗口大小调整灵活伸缩,设置页面控件居中显示实例演示
- github如何删除一个repository【找不到settings】
- MyBatis使用动态代理报 invalid bound statement (not found) 错
- ALGO-117_蓝桥杯_算法训练_友好数
- 2020 前端开源领域技术展望
- 判断访问端是否是移动设备
- 邮箱附件、QQ、微信等社交工具大文件传输解决方案
- 再有人问你什么是ThreadLocal,就把这篇文章甩给他!
- 开发 面试_农行软件开发中心实习面试
- Bootstrap 滚动监听(Scrollspy)插件
- arduino 读取当前时间_Arduino使用DS1302读取时间
- 抖音的服务器究竟有多大?
- layui 图片剪切/截取
- 分享一些java学习网站网址
- Establish(扩展ACL)
- 插入法、选择法、冒泡法(C++实现)
- SpringCloud H版之Eureka学习
- day17-李大人part1
- LIMS实验室系统建设如何提高检验效率?