小B的询问(题解)(莫队)

Junlier良心莫队

题目

luoguP2709 小B的询问

code

  1. #include<bits/stdc++.h>
  2. #define lst long long
  3. #define ldb double
  4. #define N 50050
  5. using namespace std;
  6. const int Inf=1e9;
  7. int read()
  8. {
  9. int s=0,m=0;char ch=getchar();
  10. while(ch<'0'||ch>'9'){if(ch=='-')m=1;ch=getchar();}
  11. while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
  12. return m?-s:s;
  13. }
  14. int n,m,K,unit;lst Ans;
  15. int v[N],bl[N];lst sum[N];
  16. struct QUES{int le,ri,id;lst ans;}ljl[N];
  17. bool cmp_ut(QUES &a,QUES &b){return bl[a.le]==bl[b.le]?a.ri<b.ri:a.le<b.le;}
  18. bool cmp_id(QUES &a,QUES &b){return a.id<b.id;}
  19. void Update(int now,int add)
  20. {
  21. Ans-=sum[v[now]]*sum[v[now]];
  22. sum[v[now]]+=add;
  23. Ans+=sum[v[now]]*sum[v[now]];return;
  24. }
  25. int main()
  26. {
  27. n=read(),m=read(),K=read();unit=sqrt(n);
  28. for(int i=1;i<=n;++i)
  29. v[i]=read(),bl[i]=i/unit+1;
  30. for(int i=1;i<=m;++i)
  31. ljl[i]=(QUES){read(),read(),i};
  32. sort(ljl+1,ljl+m+1,cmp_ut);
  33. int ll=1,rr=0;
  34. for(int i=1;i<=m;++i)
  35. {
  36. while(ll<ljl[i].le)Update(ll,-1) ,ll++;
  37. while(ll>ljl[i].le)Update(ll-1,1),ll--;
  38. while(rr<ljl[i].ri)Update(rr+1,1),rr++;
  39. while(rr>ljl[i].ri)Update(rr,-1) ,rr--;
  40. ljl[i].ans=Ans;
  41. }
  42. sort(ljl+1,ljl+m+1,cmp_id);
  43. for(int i=1;i<=m;++i)
  44. printf("%lld\n",ljl[i].ans);
  45. return 0;
  46. }

小B的询问(题解)(莫队)的更多相关文章

  1. BZOJ_3781_小B的询问_莫队

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

  2. 小Z的袜子(题解)(莫队)

    小Z的袜子(题解)(莫队) Junlier良心莫队 题目 luoguP1494 [国家集训队]小Z的袜子 code #include<bits/stdc++.h> #define lst ...

  3. 洛谷2709 小B的询问(莫队)

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

  4. 【Luogu P2709 小B的询问】莫队

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

  5. 洛谷P2709 BZOJ 3781 小B的询问 (莫队)

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

  6. P2709 小B的询问(莫队)

    P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...

  7. 2018.07.01 洛谷小B的询问(莫队)

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

  8. 小B的询问(莫队)

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

  9. [bzoj3781]小B的询问_莫队

    小B的询问 bzoj-3781 题目大意:给定一个n个数的序列,m次询问.每次询问一段区间内数的种类的平方和. 注释:$1\le n\,m\le 5\cdot 10^4$. 想法:莫队练习题. 我们考 ...

随机推荐

  1. Groovy基本语法

    官方文档 注释(Comments) 和Java一样,支持单行(使用//).多行(/* */)和文档注释(使用/** */). Shebang line UNIX系统支持一种特殊的单行注释叫作Sheba ...

  2. git submodule删除多余模块

    rm -rf 子模块目录 删除子模块目录及源码 vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目 vi .git/config 删除配置项中子模块相关条目 rm ...

  3. windows 如何将安装Anaconda之前已经安装的python版本(中已安装的库)移动到 Anaconda中

    题目]如何将安装Anaconda之前已经安装的python版本(中已安装的库)移动到 Anaconda中 一.概述 之前安装tensorflow的安装了anaconda并用它进行安装,anaconda ...

  4. thread.join() 阻塞原理分析

    参考: https://blog.csdn.net/u010983881/article/details/80257703

  5. navicat连接客户端报错

    怎么感觉oracle和sql server是一个货色.装个服务得装半天,还是mysql好,一下子就好了!下面有一个在centos7上面安装oracle11g的详细步骤,感觉找不到比这个更详细的了吧! ...

  6. 【leetcode】1052. Grumpy Bookstore Owner

    题目如下: Today, the bookstore owner has a store open for customers.length minutes.  Every minute, some ...

  7. Oracle12c修改时区

    Oacle12c支持可插入数据库(PDB)在一个统一的数据库(CDB)中具有不同的字符集.时区文件版本和数据库时区. 出于性能原因,Oracle建议将数据库时区设置为UTC(0:00),因为不需要转换 ...

  8. java连接redis5.0单机版报连接超时错误

    使用java代码测试redis5.0单机版时,报redis连接超时异常,而linux上的redis能正常访问: redis.clients.jedis.exceptions.JedisConnecti ...

  9. Listary安装+破解

    Listary 是 windows 下一个可以快速搜索所有程序,文件,并且可以快速启动程序和打开相应文件的这么一个工具,但这只是它的一个主要功能,还有其功能也是很屌的. 详细的介绍参考:[Listar ...

  10. stack2链栈

    #include<iostream> using namespace std; template <class Object> class Stack{ private: st ...