Codeforces 86D Powerful array (莫队算法)
题目链接 Powerful array
给你n个数,m次询问,Ks为区间内s的数目,求区间[L,R]之间所有Ks*Ks*s的和。
$1<=n,m<=200000, 1<=s<=10^{6}$
考虑莫队算法
把区间排序,然后让l和r分别询问即可。
根据排序的方式,l指针和r指针移动次数和大概是$n\sqrt{n}$ 级别的。
#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b) for (int i(a); i >= (b); --i) typedef long long LL; const int N = 2e5 + 10;
const int M = 1e6 + 10; int belong[N]; struct query{
int l, r;
int id;
void scan(){ scanf("%d%d", &l, &r); }
friend bool operator < (const query &a, const query &b){
return belong[a.l] == belong[b.l] ? a.r < b.r :
belong[a.l] < belong[b.l];
}
} q[N]; int n, m;
int a[N], c[M];
int BS, l, r;
LL ret[N], ans; int main(){ scanf("%d%d", &n, &m);
rep(i, 1, n) scanf("%d", a + i); BS = sqrt(n);
rep(i, 1, n) belong[i] = (i - 1) / BS + 1;
rep(i, 1, m){
q[i].scan();
q[i].id = i;
} sort(q + 1, q + m + 1);
l = 0; r = 0; ans = 0; rep(i, 1, m){
while (l > q[i].l){
--l;
ans += (LL)(2 * c[a[l]] + 1) * a[l];
++c[a[l]];
} while (r < q[i].r){
++r;
ans += (LL)(2 * c[a[r]] + 1) * a[r];
++c[a[r]];
} while (l < q[i].l){
--c[a[l]];
ans -= (LL)(2 * c[a[l]] + 1) * a[l];
++l;
} while (r > q[i].r){
--c[a[r]];
ans -= (LL)(2 * c[a[r]] + 1) * a[r];
--r;
} ret[q[i].id] = ans;
} rep(i, 1, m) printf("%lld\n", ret[i]);
return 0;
}
Codeforces 86D Powerful array (莫队算法)的更多相关文章
- Codeforces 86D - Powerful array(莫队算法)
题目链接:http://codeforces.com/problemset/problem/86/D 题目大意:给定一个数组,每次询问一个区间[l,r],设cnt[i]为数字i在该区间内的出现次数,求 ...
- CodeForces - 86D Powerful array (莫队)
题意:查询的是区间内每个数出现次数的平方×该数值的和. 分析:虽然是道莫队裸体,但是姿势不对就会超时.答案可能爆int,所以要开long long 存答案.一开始的维护操作,我先在res里减掉了a[p ...
- D. Powerful array 莫队算法或者说块状数组 其实都是有点优化的暴力
莫队算法就是优化的暴力算法.莫队算法是要把询问先按左端点属于的块排序,再按右端点排序.只是预先知道了所有的询问.可以合理的组织计算每个询问的顺序以此来降低复杂度. D. Powerful array ...
- [Codeforces86D]Powerful array(莫队算法)
题意:定义K[x]为元素x在区间[l,r]内出现的次数,那么它的贡献为K[x]*K[x]*x 给定一个序列,以及一些区间询问,求每个区间的贡献 算是莫队算法膜版题,不带修改的 Code #includ ...
- CodeForces - 86D D. Powerful array —— 莫队算法
题目链接:http://codeforces.com/problemset/problem/86/D D. Powerful array time limit per test 5 seconds m ...
- codeforces 86D D. Powerful array(莫队算法)
题目链接: D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input stan ...
- Codeforces 86D Powerful array (莫队)
D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input standard i ...
- codeforces 86D,Powerful array 莫队
传送门:https://codeforces.com/contest/86/problem/D 题意: 给你n个数,m次询问,每次询问问你在区间l,r内每个数字出现的次数的平方于当前这个数的乘积的和 ...
- codeforces 86D : Powerful array
Description An array of positive integers a1, a2, ..., an is given. Let us consider its arbitrary su ...
随机推荐
- Springboot 命令注入属性[--]&[-D]
场景 在用Jenkins,做自动化部署时,遇到一些命令问题. 需要通过命令的形式,注入些业务值. -D 系统属性注入 Java,启动jar 命令: java [ options ] -jar file ...
- bootstrap历练实例: 垂直胶囊式的导航菜单
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- Flask——蓝图
蓝图介绍 一个项目中,有不同的模块,但是只有一个入口,程序入口可以随便取名,一般叫做,app.py或者manage.py.当我们写一个程序,当然可以在一个文件中写完,但是有一定规模的项目,我们肯定不会 ...
- Spring框架context的注解管理方法之二 使用注解注入基本类型和对象属性 注解annotation和配置文件混合使用(半注解)
首先还是xml的配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 选择法数组排序参考(Java)
package com.swift; public class Xuanze { public static void main(String[] args) { int[] arr= {28,2,3 ...
- XCode和Cocoa在开发中使用第三方dylib示例
XCode和Cocoa在开发中使用第三方dylib示例 www.educity.cn 发布者:yukowang 来源:网络转载 发布日期:2014年06月13日 XCode和Co ...
- UIScrollView和MultiThreading、UITextField、Keyboard
- GIMP用Path作画了解一下
先准备好Path的底稿,只是实验学到的东西,粗糙了点.Paint through the Path,顾名思义,就是沿着Path作画: 1/如果选择的是Stroke line,可以根据自己的喜好,调节S ...
- php登录加密加盐
1 背景 涉及身份验证的系统都需要存储用户的认证信息,常用的用户认证方式主要为用户名和密码的方式,为了安全起见,用户输入的密码需要保存为密文形式,可采用已公开的不可逆的hash加密算法 ...
- 纯 CSS 创作一个表达怀念童年心情的条纹彩虹心特效
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/QxbmxJ 可交互视频教 ...