题面

emmm......我把莫队扔到了杂题里,因为感觉局限挺大的=。=

这题是莫队维护信息+分块查询答案,都是两者的基本操作,复杂度$O(m$ $sqrt(n)+n$ $sqrt(m))$

所以为啥要写这水题的题解来着

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=,Sq=;
  7. struct a
  8. {
  9. long long ans,num;
  10. int l,r,xx,yy,v,id;
  11. }mo[N];
  12. int b[N],blo[N],cnt[N],exi[Sq],bkt[Sq],pts[Sq][];
  13. int n,m,t1,t2,t3,t4,lp,rp,sqr,srt,xnt,maxx;
  14. bool cmp(a x,a y)
  15. {
  16. return x.v==y.v?x.r<y.r:x.v<y.v;
  17. }
  18. bool com(a x,a y)
  19. {
  20. return x.id<y.id;
  21. }
  22. void change(int val,int typ)
  23. {
  24. if(typ)
  25. {
  26. bkt[blo[val]]++;
  27. exi[blo[val]]+=(++cnt[val]==);
  28. }
  29. else
  30. {
  31. bkt[blo[val]]--;
  32. exi[blo[val]]-=(!(--cnt[val]));
  33. }
  34. }
  35. int query1(int x,int y)
  36. {
  37. int ret=;
  38. if(blo[x]!=blo[y])
  39. {
  40. for(int i=x;i<=pts[blo[x]][];i++) ret+=cnt[i];
  41. for(int i=pts[blo[y]][];i<=y;i++) ret+=cnt[i];
  42. for(int i=blo[x]+;i<=blo[y]-;i++) ret+=bkt[i];
  43. }
  44. else for(int i=x;i<=y;i++) ret+=cnt[i];
  45. return ret;
  46. }
  47. int query2(int x,int y)
  48. {
  49. int ret=;
  50. if(blo[x]!=blo[y])
  51. {
  52. for(int i=x;i<=pts[blo[x]][];i++) ret+=(cnt[i]>);
  53. for(int i=pts[blo[y]][];i<=y;i++) ret+=(cnt[i]>);
  54. for(int i=blo[x]+;i<=blo[y]-;i++) ret+=exi[i];
  55. }
  56. else for(int i=x;i<=y;i++) ret+=(cnt[i]>);
  57. return ret;
  58. }
  59. int main ()
  60. {
  61. scanf("%d%d",&n,&m),sqr=sqrt(n);
  62. for(int i=;i<=n;i++)
  63. scanf("%d",&b[i]),maxx=max(maxx,b[i]);
  64. for(int i=;i<=m;i++)
  65. {
  66. scanf("%d%d%d%d",&t1,&t2,&t3,&t4);
  67. mo[i].v=(t1-)/sqr+,mo[i].id=i,maxx=max(maxx,t4);
  68. mo[i].l=t1,mo[i].r=t2,mo[i].xx=t3,mo[i].yy=t4;
  69. }
  70. pts[xnt=][]=,srt=sqrt(maxx);
  71. for(int i=;i<=n;i++)
  72. {
  73. blo[i]=(i-)/srt+;
  74. if(i%srt==)
  75. {
  76. pts[xnt++][]=i;
  77. pts[xnt][]=i+;
  78. }
  79. }
  80. pts[xnt][]=maxx,lp=;
  81. sort(mo+,mo++m,cmp);
  82. for(int i=;i<=m;i++)
  83. {
  84. while(lp<mo[i].l) change(b[lp++],);
  85. while(lp>mo[i].l) change(b[--lp],);
  86. while(rp<mo[i].r) change(b[++rp],);
  87. while(rp>mo[i].r) change(b[rp--],);
  88. mo[i].ans=query1(mo[i].xx,mo[i].yy);
  89. mo[i].num=query2(mo[i].xx,mo[i].yy);
  90. }
  91. sort(mo+,mo++m,com);
  92. for(int i=;i<=m;i++)
  93. printf("%lld %lld\n",mo[i].ans,mo[i].num);
  94. return ;
  95. }

解题:AHOI 2013 作业的更多相关文章

  1. BZOJ 3236 AHOI 2013 作业 莫队+树状数组

    BZOJ 3236 AHOI 2013 作业 内存限制:512 MiB 时间限制:10000 ms 标准输入输出     题目类型:传统 评测方式:文本比较 题目大意: 此时己是凌晨两点,刚刚做了Co ...

  2. BZOJ 3236 AHOI 2013 作业 莫队算法

    题目大意:给出一些数,问在一个区间中不同的数值有多少种,和在一个区间中不同的数值有多少个. 思路:因为没有改动,所以就想到了莫队算法.然后我写了5K+的曼哈顿距离最小生成树,然后果断T了.(100s的 ...

  3. [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列

    \(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...

  4. [BZOJ 3238] [AHOI 2013] 差异 【后缀数组 + 单调栈】

    题目链接:BZOJ - 3238 题目分析 显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显. 求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组. 那么 ...

  5. [AHOI 2013]差异

    Description 题库链接 给定一个长度为 \(n\) 的字符串 \(S\) ,令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \[\sum_{1\leqslant i< ...

  6. 【BZOJ 3238】【AHOI 2013】差异

    http://www.lydsy.com/JudgeOnline/problem.php?id=3238 后缀数组裸题但是\(5\times 10^5\)貌似常数有点大就过不了?(我的sa常数那么大想 ...

  7. BZOJ3238:[AHOI 2013]差异

    求一个字符串的∑ ∑ len[i] + len[j] - 2 * lcp(i, j),其中i,j表示从i,j开始的后缀. 方法一:SA+单调栈,自行yy. 方法二:SAM构造出来,然后每个状态对答案的 ...

  8. 【AHOI 2013】差异

    Problem Description 给定一个长度为 \(n\) 的字符串 \(S\),令 \(T_i\) 表示它从第 \(i\) 个字符开始的后缀.求 \(\sum_{1\leqslant i&l ...

  9. COGS:1822. [AHOI2013]作业

    1822. [AHOI 2013] 作业 ★★★   输入文件:ahoi2013_homework.in   输出文件:ahoi2013_homework.out   简单对比时间限制:20 s   ...

随机推荐

  1. 自动化之UI(autoit)

    自动化 说到自动化,我真的很不喜欢UI这层去做实践.前置条件要求比较严谨,如果不满足特定的前置条件,那么成本实在太大了. 投入与产出差过大,效果打折扣.从互联网来说,UI自动化是入门门槛很低的一种实践 ...

  2. gtest命令行测试案例

    使用gtest编写的测试案例通常本身就是一个可执行文件,因此运行起来非常方便.同时,gtest也为我们提供了一系列的运行参数(环境变量.命令行参数或代码里指定),使得我们可以对案例的执行进行一些有效的 ...

  3. curl常用用法

    -v显示请求详细信息 curl www.baidu.com -v -X 指定请求方式 GET请求 curl -X GET http://localhost:8080/search?data=123 # ...

  4. python 标准日志模块loging 及日志系统实例

    本文出处:https://www.cnblogs.com/goodhacker/p/3355660.html#undefined python的标准库里的日志系统从Python2.3开始支持.只要im ...

  5. 九个很有用的php功能

    1. 函数的任意数目的参数 你可能知道PHP允许你定义一个默认参数的函数.但你可能并不知道PHP还允许你定义一个完全任意的参数的函数 下面是一个示例向你展示了默认参数的函数: 1 2 3 4 5 6 ...

  6. c# 消息机制

    1.windows系统是一个消息驱动的系统,windows本身有自己的消息队列. 系统传递消息给应用程序. 应用程序的消息机制:应用程序的执行是通过消息驱动的.消息是整个应用程序的工作引擎. 2.c# ...

  7. 第十一次作业 - Alpha 事后诸葛亮(团队)

    软工 · 第十一次作业 - Alpha 事后诸葛亮(团队) 组长本次作业链接 现代软件工程 项目Postmortem 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场 ...

  8. hdu 1241--入门DFS

    Oil Deposits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tot ...

  9. 周总结web未完成的代码

    <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Con ...

  10. equals()和hashcode()详解

    转载自http://www.cnblogs.com/Qian123/p/5703507.html java.lang.Object类中有两个非常重要的方法:   public boolean equa ...