小B的询问 bzoj-3781

题目大意:给定一个n个数的序列,m次询问。每次询问一段区间内数的种类的平方和。

注释:$1\le n\,m\le 5\cdot 10^4$。


想法:莫队练习题。

我们考虑旁区间转移:只需要把当前权值贡献减去,然后修改,加一或减一,之后再把新贡献加回来。

即可。

最后,附上丑陋的代码.. ...

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#define N 50010
using namespace std; int Ans[N],a[N],ans,blg[N],stack[N];
struct Node {int l,r,id;}q[N]; inline bool cmp(const Node &x,const Node &y) {return blg[x.l]==blg[y.l]?x.r<y.r:blg[x.l]<blg[y.l];}
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
inline void fix(int val,int delta)
{
ans-=1ll*stack[val]*stack[val];
stack[val]+=delta;
ans+=1ll*stack[val]*stack[val];
}
int n,m,k;
void Test()
{
puts("Fuck"); for(int i=1;i<=m;i++) printf("%d ",q[i].id); puts("");
}
int main()
{
n=rd(),m=rd(),k=rd(); int unit=sqrt(n); int t=n/unit;
for(int i=1;i<=t;i++)
{
for(int j=(i-1)*unit+1;j<=i*unit;j++) {a[j]=rd(); blg[j]=i;}
}
if(unit*t<n)
{
t++;
for(int i=unit*(t-1)+1;i<=n;i++) a[i]=rd(),blg[i]=t;
}
for(int i=1;i<=m;i++) q[i].l=rd(),q[i].r=rd(),q[i].id=i;
int l=1,r=0;
sort(q+1,q+m+1,cmp); /* Test(); */for(int i=1;i<=m;i++)
{
while(l<q[i].l) fix(a[l],-1),l++;
while(r>q[i].r) fix(a[r],-1),r--;
while(l>q[i].l) l--,fix(a[l],1);
while(r<q[i].r) r++,fix(a[r],1);
Ans[q[i].id]=ans;
}
for(int i=1;i<=m;i++) printf("%d\n",Ans[i]);
return 0;
}

小结:莫队真的好玩啊,有些没什么头绪的题想一想分块有奇效。

最新文章

  1. Ant 学习及常用任务
  2. Android之sqlite的使用 (转载)
  3. WCF实现方法重载
  4. EmguCV 如何从数组中创建出IntPtr
  5. java之Cookie详解
  6. Magical Forest
  7. STM32 枚举类型和结构体的使用
  8. Struts1的处理流程
  9. 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)
  10. Form类的KeyPreview属性
  11. [BZOJ1602] [Usaco2008 Oct] 牧场行走 (LCA)
  12. Cocos2D在Xcode7和iOS 9.2上IMP调用出错
  13. P1182 数列分段`Section II`(贪心+二分, 好题)
  14. Linux CentOS7 开启80,443端口外网访问权限
  15. Hbase服务报错:splitting is non empty&#39;: Directory is not empty
  16. DockOne技术分享(二十):Docker三剑客之Swarm介绍
  17. Spring Cloud 与 Dubbo、Spring Cloud 与 Docker、Spring Cloud 与 Kubernetes 比较
  18. Python3 中 sys.argv[ ]的用法解释
  19. 三个实例演示 Java Thread Dump 日志分析
  20. Bazel构建工具的安装

热门文章

  1. 【计蒜客习题】 取石子游戏(gcd)
  2. android序列化(2)Parcelable与Parcel
  3. Shell脚本,简单&amp; 强大
  4. 26 c#类的组合
  5. SQL 几个查看性能的语句
  6. Python_购物车问题
  7. dubbo与springmvc的简单使用
  8. 【C++】Item34.区分接口继承和实现继承
  9. Table标题行冻结,数据行滚动的一种方式
  10. Vue指令2:v-bind