CF86D】的更多相关文章

原题传送门 裸的莫队啊,我博客里有对莫队较详细的介绍 这道题很简单,可以说是裸的模板 但是如何在已有的值上进行操作? 小学生应该都知道 那么转移就超级简单了qaq inline void add(register int c) { sum+=(num[c]+num[c]+1)*c; ++num[c]; } inline void del(register int c) { --num[c]; sum-=(num[c]+num[c]+1)*c; } 要开long long(虽说我没试过int,但我…
题意翻译 题意:给出一个n个数组成的数列a,有t次询问,每次询问为一个[l,r]的区间,求区间内每种数字出现次数的平方×数字的值 的和. 输入:第一行2个正整数n,t. 接下来一行n个正整数,表示数列a1​~an的值. 接下来t行,每行两个正整数l,r,为一次询问. 输出:t行,分别为每次询问的答案. 数据范围:1≤n,t≤2∗105,1≤ai≤106,1≤l,r≤n 题目描述 An array of positive integers a1,a2,...,an a_{1},a_{2},...,…
题解: 莫队分块 分块大小为sqrt(n) 代码: #include<bits/stdc++.h> using namespace std; ; typedef long long ll; ll a[N],cnt[N*],ans[N],res; int n,t,L,R; struct node{int x,y,l,p;}q[N]; int cmp(const node &x,const node &y) { if (x.l==y.l)return x.y<y.y; ret…
题面 给出一个\(n\)个数组成的数列\(a\),有\(t\)次询问,每次询问为一个\([l,r]\)的区间,求区间内每种数字出现次数的平方×数字的值 的和 思路: 直接上莫队咯 然后就T了 没学过莫队?!我也没办法 这道题的数据范围在\(2e5\)的级别,有人会问莫队肯定要炸啊 捏~ 时限5000ms,那就可以乱搞了 但是!还是要加一些优化 如何优化? 1.对于算法本身的优化 由于莫队可以说是一个块状暴力的算法,就是把区间划分为\(\sqrt n\)块然后在块内暴力(到头还是暴力) 我们可以把…