题目描述

小B有一个序列,包含N个1~K之间的整数。他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数。小B请你帮助他回答询问。

输入输出格式

输入格式:

第一行,三个整数N、M、K。

第二行,N个整数,表示小B的序列。

接下来的M行,每行两个整数L、R。

输出格式:

M行,每行一个整数,其中第i行的整数表示第i个询问的答案。

输入输出样例

输入样例#1: 复制

6 4 3
1 3 2 1 1 3
1 4
2 6
3 5
5 6
输出样例#1: 复制

6
9
5
2

说明

对于全部的数据,1<=N、M、K<=50000

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std; const int N=; int n,m,k;
int a[N],c[N];
int ans,Ans[N];
int belong[N];
struct Querry
{
int tim,l,r;
bool operator < (const Querry &a) const
{
if(belong[l]==belong[a.l]) return belong[r]<belong[a.r];
return belong[l]<belong[a.l];
}
}q[N]; int read()
{
char c=getchar();int num=;
for(;!isdigit(c);c=getchar());
for(;isdigit(c);c=getchar())
num=num*+c-'';
return num;
} void init()
{
n=read(),m=read(),k=read();
int size=sqrt(n);
for(int i=;i<=n;++i)
a[i]=read(),
belong[i]=(i-)/size+;
for(int i=;i<=m;++i)
q[i].l=read(),q[i].r=read(),q[i].tim=i;
sort(q+,q+m+); } /*void update(int now,bool type)
{
if(type)
{
ans-=c[now]*c[now];
++c[now];
ans+=c[now]*c[now];
}
else
{
ans-=c[now]*c[now];
--c[now];
ans+=c[now]*c[now];
}
}*/
void update(int now,bool type)
{
if(type)
ans+=c[now]<<|,++c[now]; //(a+1)*(a+1)==a*a+2*a+1,比a*a多了2*a+1
else
ans-=(c[now]<<)-,--c[now]; //(a-1)*(a-1)==a*a-2*a+1,比a*a少了2*a-1
} void work()
{
for(int i=q[].l;i<=q[].r;++i)
update(a[i],);
Ans[q[].tim]=ans;
for(int i=;i<=m;++i)
{
if(q[i].l>q[i-].l)
for(int j=q[i-].l;j<q[i].l;++j)
update(a[j],);
if(q[i].l<q[i-].l)
for(int j=q[i].l;j<q[i-].l;++j)
update(a[j],);
if(q[i].r<q[i-].r)
for(int j=q[i].r+;j<=q[i-].r;++j)
update(a[j],);
if(q[i].r>q[i-].r)
for(int j=q[i-].r+;j<=q[i].r;++j)
update(a[j],);
Ans[q[i].tim]=ans;
}
for(int i=;i<=m;++i)
printf("%d\n",Ans[i]);
} int main()
{
init();
work();
return ;
}

P2709 小B的询问 (莫队板子)的更多相关文章

  1. 洛谷P2709 小B的询问 莫队

    小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小 ...

  2. 洛谷P2709 小B的询问 莫队做法

    题干 这个是用来学莫队的例题,洛谷详解 需要注意的一点,一定要分块!不然会慢很多(直接TLE) 其中分块只在排序的时候要用,并且是给问题右端点分块 再就是注意add与del函数里的操作,增加数量不提, ...

  3. P2709 小B的询问-莫队

    思路 :依旧是 分块 块内按照 r 排序 不同块按照 L排序,处理好增加 删除对结果的影响即可. #include<bits/stdc++.h> using namespace std; ...

  4. BZOJ3781:小B的询问(莫队)

    Description 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L ...

  5. 小B的询问 莫队分块

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  6. 【bzoj3781】小B的询问 莫队算法

    原文地址:http://www.cnblogs.com/GXZlegend/p/6803821.html 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L ...

  7. luogu 2709 小B的询问 莫队

    题目链接 Description 小B有一个序列,包含\(N\)个\(1-K\)之间的整数.他一共有\(M\)个询问,每个询问给定一个区间\([L..R]\),求\(\sum_{i=1}^{K}c_i ...

  8. luogu 2709小b的询问--莫队

    https://www.luogu.org/problemnew/show/P2709 无修改的莫队几乎没有什么太高深的套路,比较模板吧,大多都是在那两个函数上动手脚. 这题询问每一种数字数量的平方和 ...

  9. luoguP2709 小B的询问 [莫队]

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  10. 【luogu1709】小B的询问 - 莫队

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

随机推荐

  1. 服务端技术选型与考虑(go)

  2. NEST analyze与mapping

    /// <summary> /// POST /_analyze?pretty=true /// POST /employee/_analyze /// </summary> ...

  3. js 的七大原则--单一原则、开闭原则、替换原则(一)

    一.前言: js 的七大设计原则: 1.单一原则 2.开闭原则 3.里氏替换原则 4.依赖倒转原则 5.接口隔离原则 6.合成复用原则 7.迪米尔法则 二.单一原则 1.定义:单一原则就是一个对象或者 ...

  4. Hadoop常用命令及范例

    hadoop中的zookeeper,hdfs,以及hive,hbase都是hadoop的组件,要学会熟练掌握相关的命令及其使用规则,下面就是一些常用命令及对hbase和hive的操作语句,同时也列出了 ...

  5. ECSHOP(3.0.0升级3.6.0)帮助教程

    说明: 本文档只针对于未做过二开的ECSHOP3.0 用户 1.准备材料 先确保正在使用的ECShop系统版本为ecshop3.0.0并且代码没有经过二次开发,然后下载最新的ECShop3.6.0安装 ...

  6. 笔谈OpenGL ES(一)

    现在图形类.视频类app越来越多,学习OpenGL ES是很有必要的,作为程序员是有必要做技术积累的.现在做播放器开发的工作,正好也涉及这块,那就好好学一学. CSDN上有套教程不错,OpenGL E ...

  7. Invalid escape sequence at line 1 column 29 path $[0].name

    编译报错:Invalid escape sequence at line 1 column 29 path $[0].name 解决:grade.properties 文件下 org.gradle.j ...

  8. 动态修改app build版本CFBundleVersion

    1.需求说明 2.操作步骤 2.1 新建脚本,选择Build Phases 2.2 点击加号,选择New Run Script Phase 2.3 为了便于识别,双击重命名为 Dynamic Buil ...

  9. 3.kafka 基本配置

    1.主题管理 kafka-topics.sh工具脚本用于对主题操作,如创建.删除.修改.分区数.副本数及主题级别的配置. 1.1创建名为kafka-test主题,有2个副本,3个分区 [hadoop@ ...

  10. urllib模块中parse函数中的urlencode和quote_plus方法

    本来只是向看一下quote_plus的作用,然后发现urlencode方法也是很方便的一个组合字符串的方法首先是介绍一下urlencode,他是将一些传入的元素使用&串联起来,效果如下: &g ...