Sona(莫队+离散化)

2024-02-02 18:48
文章标签 离散 莫队 sona

本文主要是介绍Sona(莫队+离散化),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Sona, Maven of the Strings. Of cause, she can play the zither.

Sona can’t speak but she can make fancy music. Her music can attack, heal, encourage and enchant.

There’re an ancient score(乐谱). But because it’s too long, Sona can’t play it in a short moment. So Sona decide to just play a part of it and revise it.

A score is composed of notes. There are 109 kinds of notes and a score has 105 notes at most.

To diversify Sona’s own score, she have to select several parts of it. The energy of each part is calculated like that:

Count the number of times that each notes appear. Sum each of the number of times’ cube together. And the sum is the energy.

You should help Sona to calculate out the energy of each part.

Input
This problem contains several cases. And this problem provides 2 seconds to run.
The first line of each case is an integer N (1 ≤ N ≤ 10^5), indicates the number of notes.
Then N numbers followed. Each number is a kind of note. (1 ≤ NOTE ≤ 10^9)
Next line is an integer Q (1 ≤ Q ≤ 10^5), indicates the number of parts.
Next Q parts followed. Each part contains 2 integers Li and Ri, indicates the left side of the part and the right side of the part.
Output
For each part, you should output the energy of that part.

Sample Input
8
1 1 3 1 3 1 3 3
4
1 8
3 8
5 6
5 5

Sample Output
128
72
2
1

题意: 给定N个数和m次查询,查询给定范围内不同种类颜色出现次数的立方和。

题解:莫队算法加离散化

代码如下

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
long long a[200010],b[200010],c[200010];
long long sum,k,d[200010];
struct z{int l,r,id,p;
} s[200010];
bool cmp(z a,z b)   //对查询进行排序 
{if(a.p==b.p)return a.r<b.r;elsereturn a.p<b.p;
}
void add(int x,int y)  //随着范围移动数据加减
{if(x==0)return ;sum=sum-c[a[x]]*c[a[x]]*c[a[x]];  //减去原来的c[a[x]]=c[a[x]]+y;sum=sum+c[a[x]]*c[a[x]]*c[a[x]];  //加上现在的
}
int main()
{int n,m;while(~scanf("%d",&n)&&n){int i,j,l=0,r=0;for(i=1;i<=n;i++){scanf("%lld",&a[i]);d[i]=a[i];c[i]=0;}scanf("%d",&m);sort(d+1,d+1+n);k=unique(d+1,d+n+1)-(d+1);for(i=1;i<=n;i++)a[i]=lower_bound(d+1,d+1+k,a[i])-d;   //离散化进行优化 int x=sqrt(n);for(i=0;i<m;i++){scanf("%d%d",&s[i].l,&s[i].r);s[i].id=i;s[i].p=s[i].l/x;}sort(s,s+m,cmp);sum=0;for(i=0;i<m;i++)          //莫队 {while(l<s[i].l) add(l++,(-1));while(l>s[i].l) add(--l,1);while(r>s[i].r) add(r--,(-1));while(r<s[i].r) add(++r,1);b[s[i].id]=sum;}for(i=0;i<m;i++)printf("%lld\n",b[i]);}return 0;
}

这篇关于Sona(莫队+离散化)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/671628

相关文章

处理特征向量和离散特征

在最新的腾讯的社交广告大赛中,数据如下,如何处理这种向量的特征 比如intersets1,interests2.... LBS,950,age,4,carrier,1,consumptionAbility,2,ct,3 1,education,7,gender,2,interest1,93 70 77 86 109 47 75 69 45 8 29 49 83 6 46 36

特征离散和特征选择

连续特征的离散化:在什么情况下将连续的特征离散化之后可以获得更好的效果? Q:CTR预估,发现CTR预估一般都是用LR,而且特征都是离散的。为什么一定要用离散特征呢?这样做的好处在哪里? A: 在工业界,很少直接将连续值作为逻辑回归模型的特征输入,而是将连续特征离散化为一系列0、1特征交给逻辑回归模型,这样做的优势有以下几点: 0、 离散特征的增加和减少都很容易,易于模型的快速迭代。(离散

【HDU】3729 I'm Telling the Truth 离散+最大流

传送门:【HDU】3729 I'm Telling the Truth 题目分析:我看这么大的数据范围,如果普通二分肯定要超时的啊。。。然后就敲了一个离散化+最大流了。。。 但是我网上看他们的题解,都是裸裸的开一个100万的数组啊!!!还比我离散的网络流还快啊啊啊!!于是我就测一次给的区间有多大(如果超出一定范围就拿一个变量除以0让报RE),第一次10000没事,然后1000。。还是没事

【HDU】5958 New Signal Decomposition【离散对数下的FFT】

题目链接:【HDU】5958 New Signal Decomposition 在此先感谢小q对我的指导,没有q老师的帮助,估计永远也做不出来了。 首先我们考虑对这个式子做离散对数。令 g g为pp的某个原根,则有: bi=∑p−1j=0aj⋅r(i,j) \quad b_i=\sum_{j=0}^{p-1}a_j\cdot r(i,j) bi=∑p−1j=0aj⋅2sin32πi⋅j

【自动驾驶】控制算法(七)离散规划轨迹的误差计算

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将

MATLAB分析图像的离散余弦变换(DCT)

1. MATLAB的介绍以及所需函数的说明:  1.1 MATLAB  MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks 公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设

《数字信号处理》学习04-离散时间系统中的线性时不变系统

目录 一,系统及离散时间系统   二,离散时间系统中的线性时不变系统 1,线性系统  1) 可加性  2) 比例性(齐次性) 3)叠加原理(叠加性质)  2,时不变系统(移不变系统) 通过前几篇文章的学习,此时我对序列的相关概念和运算已经有所掌握,接下来我将开始学习新的概念“离散时间系统中的线性时不变系统”, 一,系统及离散时间系统  首先需要知道系统的概念,在《信

Pandas-高级处理(八):数据离散化【pandas.cut:根据指定分界点对连续数据进行分箱处理】【pandas.qcut:指定箱子的数量对连续数据进行等宽分箱处理】【get_dummies】

Python实现连续数据的离散化处理主要基于两个函数:pandas.cut和pandas.qcut,pandas.cut根据指定分界点对连续数据进行分箱处理,pandas.qcut可以指定箱子的数量对连续数据进行等宽分箱处理(注意:所谓等宽指的是每个箱子中的数据量是相同的) 应用cut、qcut实现数据的区间分组应用get_dummies实现数据的one-hot编码 数据离散化 可以用来减少

《数字信号处理》学习01-离散时间信号与序列的卷积和运算

目录 一,信号 二,序列的运算  1,卷积和  2,matlab实现  相关的电子书籍请到这篇文章所在的专栏,并通过夸克网盘链接下载。 很多简单的知识点我就不再赘述了,接下来就着重记录我学习过程中遇到的较难理解且容易忘记的知识点,如果想要再详细些的,可以在评论区留言。 这篇文章主要是用于整理我在看书过程中自己做的一些记忆方法(个人记忆方法,因人而异,仅供参考) 一,信号