3236: [Ahoi2013]作业

Time Limit: 100 Sec  Memory Limit: 512 MB
Submit: 1113  Solved: 428
[Submit][Status][Discuss]

Description

Input

Output

Sample Input

3 4
1 2 2
1 2 1 3
1 2 1 1
1 3 1 3
2 3 2 3

Sample Output

2 2
1 1
3 2
2 1

HINT

N=100000,M=1000000

Source

By wangyisong1996加强数据

题解:

莫队+分块乱搞。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 100010
  4. #define MAXM 1000010
  5. int block,sum[MAXN],tot[MAXN],num[],color[MAXN],pos[MAXN],ans1[MAXM],ans2[MAXM];
  6. struct node
  7. {
  8. int l,r,a,b,id;
  9. }q[MAXM];
  10. int read()
  11. {
  12. int s=,fh=;char ch=getchar();
  13. while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
  14. while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
  15. return s*fh;
  16. }
  17. bool cmp(node aa,node bb)
  18. {
  19. if(pos[aa.l]==pos[bb.l])return aa.r<bb.r;
  20. return aa.l<bb.l;
  21. }
  22. void Del(int C)
  23. {
  24. int cc=pos[C];
  25. sum[cc]--;tot[C]--;
  26. if(tot[C]==)num[cc]--;
  27. }
  28. void Add(int C)
  29. {
  30. int cc=pos[C];
  31. sum[cc]++;tot[C]++;
  32. if(tot[C]==)num[cc]++;
  33. }
  34. int getans1(int aa,int bb)
  35. {
  36. int p1=pos[aa],p2=pos[bb],gs=,i;
  37. if(p1==p2)
  38. {
  39. for(i=aa;i<=bb;i++)gs+=tot[i];
  40. return gs;
  41. }
  42. for(i=aa;i<=p1*block;i++)gs+=tot[i];
  43. for(i=p1+;i<=p2-;i++)gs+=sum[i];
  44. for(i=(p2-)*block+;i<=bb;i++)gs+=tot[i];
  45. return gs;
  46. }
  47. int getans2(int aa,int bb)
  48. {
  49. int p1=pos[aa],p2=pos[bb],gs=,i;
  50. if(p1==p2)
  51. {
  52. for(i=aa;i<=bb;i++)if(tot[i]!=)gs++;
  53. return gs;
  54. }
  55. for(i=aa;i<=p1*block;i++)if(tot[i]!=)gs++;
  56. for(i=p1+;i<=p2-;i++)gs+=num[i];
  57. for(i=(p2-)*block+;i<=bb;i++)if(tot[i]!=)gs++;
  58. return gs;
  59. }
  60. int write(int k)
  61. {
  62. if(k<){putchar('-');k=-k;}
  63. if(k>)write(k/);
  64. putchar(k%+'');
  65. }
  66. int main()
  67. {
  68. int n,m,i,L,R;
  69. n=read();m=read();
  70. block=(int)sqrt(n);
  71. for(i=;i<=n;i++)color[i]=read(),pos[i]=(i-)/block+;
  72. //block=(int)sqrt(n);
  73. for(i=;i<=m;i++)q[i].l=read(),q[i].r=read(),q[i].a=read(),q[i].b=read(),q[i].id=i;
  74. //for(i=1;i<=n;i++)pos[i]=(i-1)/block+1;
  75. sort(q+,q+m+,cmp);
  76. L=;R=;
  77. //memset(tot,0,sizeof(tot));//当前枚举的区间中每种颜色的个数.
  78. //memset(sum,0,sizeof(sum));//每一块的总共的数量.
  79. //memset(num,0,sizeof(num));//每一块的颜色的数量.
  80. for(i=;i<=m;i++)
  81. {
  82. while(L<q[i].l)
  83. {
  84. Del(color[L]);
  85. L++;
  86. }
  87. while(L>q[i].l)
  88. {
  89. L--;
  90. Add(color[L]);
  91. }
  92. while(R<q[i].r)
  93. {
  94. R++;
  95. Add(color[R]);
  96. }
  97. while(R>q[i].r)
  98. {
  99. Del(color[R]);
  100. R--;
  101. }
  102. ans1[q[i].id]=getans1(q[i].a,q[i].b);
  103. ans2[q[i].id]=getans2(q[i].a,q[i].b);
  104. }
  105. for(i=;i<=m;i++){write(ans1[i]);putchar(' ');write(ans2[i]);putchar('\n');}//printf("%d %d\n",ans1[i],ans2[i]);
  106. return ;
  107. }

Bzoj 3236: [Ahoi2013]作业 莫队,分块的更多相关文章

  1. BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )

    莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢... ----------------------------------------------- ...

  2. BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)

    传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...

  3. [AHOI2013]作业 (莫队+分块)

    [AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...

  4. bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)

    题目传送门:洛谷P4396. 题意简述: 给定一个长度为\(n\)的数列.有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不 ...

  5. BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]

    题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...

  6. bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...

  7. BZOJ3236:[AHOI2013]作业(莫队,分块)

    Description Input Output Sample Input 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 Sample Output 2 2 1 ...

  8. [BZOJ 3236] [Ahoi2013] 作业 && [BZOJ 3809] 【莫队(+分块)】

    题目链接: BZOJ - 3236   BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...

  9. BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块

    题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...

随机推荐

  1. Win32 CreateWindow GdiPlus

    #include "stdafx.h" #include "TestGidPlus.h" LRESULT CALLBACK WndProc(HWND, UINT ...

  2. ScrollView 尽量避免嵌套RelativeLayout,非常惨痛的教训

    <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android=&q ...

  3. 访问Access数据库(有多个数据库时 体现多态)

    如果想编写单机版MIS.小型网站等对数据库性能要求不高的系统,又不想安装SQLServer,可以使用Access(MDAC),只要一个mdb文件就可以了.使用Access创建mdb文件,建表.OleD ...

  4. HTML教程:link标记

    开发php语言的网站,<head>里link标签这样:<link href="xmlrpc.php?rsd=1" title="rsd" ty ...

  5. CentOS 6.4 64位 安装 jdk 6u45

    准备: 1.下载历史版本jdk 地址: http://java.sun.com/products/archive/ 下载的版本 jdk-6u45-linux-x64-rpm.bin  Linux x6 ...

  6. CI的面向切面的普通权限验证

    第一步:开启CI的钩子配置,此次不多说看CI手册即可. 第二步:在cofig/hooks.php中进行钩子配置,CI手册中有记载 <?php defined('BASEPATH') OR exi ...

  7. linux基础之Shell Script入门介绍

    本文介绍下,学习shell script编程的入门知识,通过几个入门实例,带领大家走进shell script的神圣殿堂,呵呵,有需要的朋友参考下. 本文转自:http://www.jbxue.com ...

  8. 压缩代码加速ecshop程序页面加载速度

    由于页面有很多图片,页面加载速度有点慢,本来打算减小图片的体积,后来想想这个后期还得测试下,所以暂时不打算使用google的图片优化工具,先把ecshop生成的html代码压缩下吧 压缩前:首页体积为 ...

  9. 005 Python的数值类型

    005 Python的数值类型 BIF    指的是内置函数,一般不作为变量命名.如 input,while,if,else,float,等等.整型:整数.(python3.0版本把整型和长整型结合在 ...

  10. 大话设计模式(带目录完整版).pdf等

    点击进入百度网盘 大话设计模式(带目录完整版).pdf等 保存至网盘下载二维码举报 赞(0)| 评论 | 分享至 分享时间:2014-04-01 11:02 | 467次浏览 130次下载 81次保存 ...