思路:莫队算法,离线操作,将所有询问的左端点进行分块(分成sqrt(n) 块每块sqrt(n)个),用左端点的块号进行排序小的在前,块号相等的,右端点小的在前面。 这样要是两个相邻的查询在同一块内左端点每次最多移动sqrt(n) n次的话效率为nsqrt(n) ,对于同一块内右端点为有序的那么最多移动 n次  。总的效率为nsqrt(n) 。 要是相邻的查询不同块 最坏效率为O(n) 因为块最多为sqrt(n)个那么坏效率也为nsqrt(n)。   总的效率就为nsqrt(n)

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include <iostream>
#define N 200010
#define LL __int64
using namespace std;
struct node {
int l, r, id;
int pid;
} s[N];
inline bool cmp(node a, node b) {
return a.id < b.id || a.id == b.id && a.r < b.r;
}
int a[N];
LL ans[N];
int cnt[1000100];
LL sum = 0;
inline void add(LL x) {
sum += x * (cnt[x] << 1 | 1);
cnt[x]++;
}
inline void dec(LL x) {
sum += x * (1 - (cnt[x] << 1));
cnt[x]--;
}
int main() {
int i, j, k, n, m, one;
memset(cnt, 0, sizeof(cnt));
scanf("%d%d", &n, &m);
one = sqrt(n * 1.0);
for (int i = 1; i <= n; ++i)
scanf("%d", &a[i]);
for (int i = 0; i < m; ++i) {
scanf("%d%d", &s[i].l, &s[i].r);
s[i].id = s[i].l / one;
s[i].pid=i;
}
sort(s, s + m, cmp);
int l, r;
l = s[0].l;
r = s[0].r; for (int i = s[0].l; i <= s[0].r; ++i)
add(a[i]);
ans[s[0].pid]=sum;
for (i = 1; i < m; ++i) {
while(r<s[i].r)add(a[++r]);
while(r>s[i].r)dec(a[r--]);
while(l<s[i].l)dec(a[l++]);
while(l>s[i].l)add(a[--l]);
ans[s[i].pid]=sum;
}
for(int i=0;i<m;++i)
printf("%I64d\n",ans[i]);
return 0;
}

  

CodeForces 86D(Yandex.Algorithm 2011 Round 2)的更多相关文章

  1. Yandex.Algorithm 2011 Round 1 D. Sum of Medians 线段树

    题目链接: Sum of Medians Time Limit:3000MSMemory Limit:262144KB 问题描述 In one well-known algorithm of find ...

  2. Yandex.Algorithm 2011 Round 2 D. Powerful array 莫队

    题目链接:点击传送 D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes input ...

  3. Codeforces 558(C、D、E)总结

    558C 题意:给你n个数,可对每一个数进行操作(乘2或者除以2).求最少的操作使得全部的数都相等. 思路 : dp[ t ] 表示全部的数转化到 t 所需的最少操作, vis[ t ] 表示有多少数 ...

  4. 魔法使的烟花(NOIP模拟赛Round 7)

    [问题描述] 魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水.为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探. 魔法森林分为n个区域,由n-1条长度 ...

  5. YYH的球盒游戏(NOIP模拟赛Round 6)

    题目描述 YYH有一些总共有种颜色的球,他有颜色的球个.他同样有个盒子,第个盒子能放个球. 他的目标是把这个球按规则放进个盒子里: 对于一个盒子,对于每种颜色的球至多只能放个. 把颜色为的球放进盒子, ...

  6. codeforces水题100道 第六题 Yandex.Algorithm 2011 Qualification 2 A. Double Cola (math)

    题目链接:www.codeforces.com/problemset/problem/82/A题意:五个人排队喝可乐,一个人喝完一杯,就在可乐的最后面放两杯自己喝的可乐,问第n个喝的人是谁.C++代码 ...

  7. Yandex.Algorithm 2011 A. Double Cola

    1.题目描写叙述:点击打开链接 2.解题思路:本题是一道找规律的数学题,通过题意描写叙述不难知道,相当于有5棵二叉树构成了一个森林,须要你按层次遍历找到第n个人是谁. 观察后不难发现,如果最開始的一层 ...

  8. Educational Codeforces Round 32 Maximum Subsequence CodeForces - 888E (meet-in-the-middle,二分,枚举)

    You are given an array a consisting of n integers, and additionally an integer m. You have to choose ...

  9. Powerful array CodeForces - 86D(莫队)

    给你n个数,m次询问,Ks为区间内s的数目,求区间[L,R]之间所有Ks*Ks*s的和.1<=n,m<=200000.1<=s<=10^6 #include <iostr ...

随机推荐

  1. mysql 1030 Got error 28 from storage engine

    mysql 1030 Got error 28 from storage engine 错误原因:磁盘临时空间不够. 解决办法:df -h 查看设备存储的使用情况 du -h --max-depth= ...

  2. postgresql如何实现group_concat功能

    MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如 表:id name---------------1 A2 B1 B SELECT id, group_c ...

  3. VisualSVN官网

    VisualSVN是一款图形化svn服务器. http://www.visualsvn.com/

  4. vitamio框架

    import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...

  5. JavaWeb学习计划

    1 HTML2 CSS3 JavaScript4 XML5 Tomcat6 Servlet7 HTTP8 Cookie Session9 JSP10 JSTL11 MySQL12 JDBC13 过滤器 ...

  6. Linux用户查询

    用户列表文件:/etc/passwd 用户组列表文件:/etc/group 查看系统中有哪些用户:cut -d : -f 1 /etc/passwd 查看可以登录系统的用户:cat /etc/pass ...

  7. golang json

    1.Go语言的JSON 库 Go语言自带的JSON转换库为 encoding/json 1.1)其中把对象转换为JSON的方法(函数)为 json.Marshal(),其函数原型如下 func Mar ...

  8. java读取properties配置文件的方法

    app.properties mail.smtp.host=smtp.163.com mail.transport.protocol=smtp import java.io.InputStream; ...

  9. 【服务器环境搭建-Centos】常用系统命令篇

    uname -a 查看系统信息

  10. git服务器搭建-new

    http://blog.chinaunix.net/uid-26729093-id-4652536.html 基本命令使用:http://www.cnblogs.com/xdao/p/linux_gi ...