--BZOJ

http://www.lydsy.com/JudgeOnline/problem.php?id=3809



考虑对l,r跑莫队,对一组维护美丽度出现次数的桶修改,

然后把桶序列用分块维护查询

然后是吐槽:

内存28M,哦,这个题居然卡内存。。。。。

卡内存!!!

然后我就为本校的权限号贡献了三次MLE......

代码:

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<algorithm>
  4. using std::sort;
  5. struct ss{
  6. int l,r,a,b,num;
  7. }x[];
  8. int n,m,cut;
  9. int tong[];
  10. int id[];
  11. int mark[];
  12. int a[];
  13. int ans[];
  14. bool cmp(ss a,ss b){
  15. if(id[a.l]==id[b.l])
  16. return a.r<b.r;
  17. return id[a.l]<id[b.l];
  18. }
  19. inline void in(int &ans)
  20. {
  21. ans=;bool p=false;char ch=getchar();
  22. while((ch>'' || ch<'')&&ch!='-') ch=getchar();
  23. if(ch=='-') p=true,ch=getchar();
  24. while(ch<=''&&ch>='') ans=ans*+ch-'',ch=getchar();
  25. if(p) ans=-ans;
  26. }
  27. void modui();
  28. int fin_brick(int l,int r);
  29. int main()
  30. {
  31. int i,j,k;
  32. in(n),in(m);
  33. cut=(int)sqrt(n);
  34. if(cut*cut<n)cut++;
  35. for(i=;i<=n;i++)
  36. in(a[i]);
  37. for(i=;i<=m;i++)
  38. in(x[i].l),in(x[i].r),in(x[i].a),in(x[i].b),x[i].num=i;
  39. for(i=;i<=n;i++)
  40. id[i]=i/cut;
  41. sort(x+,x+m+,cmp);
  42. modui();
  43. for(i=;i<=m;i++)
  44. printf("%d\n",ans[i]);
  45. return ;
  46. }
  47. void modui(){
  48. int l_p=x[].l,r_p=x[].l-,i;
  49. for(i=;i<=m;i++){
  50. while(r_p<x[i].r){
  51. r_p++;
  52. if(!tong[a[r_p]])
  53. mark[a[r_p]/cut]++;
  54. tong[a[r_p]]++;
  55. }
  56. while(r_p>x[i].r){
  57. tong[a[r_p]]--;
  58. if(!tong[a[r_p]])
  59. mark[a[r_p]/cut]--;
  60. r_p--;
  61. }
  62. while(l_p>x[i].l){
  63. l_p--;
  64. if(!tong[a[l_p]])
  65. mark[a[l_p]/cut]++;
  66. tong[a[l_p]]++;
  67. }
  68. while(l_p<x[i].l){
  69. tong[a[l_p]]--;
  70. if(!tong[a[l_p]])
  71. mark[a[l_p]/cut]--;
  72. l_p++;
  73. }
  74. ans[x[i].num]=fin_brick(x[i].a,x[i].b);
  75. }
  76. }
  77. int fin_brick(int l,int r){
  78. int b_l=l/cut,b_r=r/cut,ll=l%cut,rr=r%cut;
  79. int i,j,ans=;
  80. if(b_l==b_r){
  81. for(i=l;i<=r;i++)
  82. if(tong[i])
  83. ans++;
  84. return ans;
  85. }
  86. for(i=ll,j=l;i<=cut-;i++,j++)
  87. if(tong[j])
  88. ans++;
  89. for(i=rr,j=r;i>=;i--,j--)
  90. if(tong[j])
  91. ans++;
  92. b_l++;b_r--;
  93. for(i=b_l;i<=b_r;i++)
  94. ans+=mark[i];
  95. return ans;
  96. }
  1. #include<cstdio>
  2. #include<cstdlib>
  3. #include<ctime>
  4. using namespace std;
  5. int main()
  6. {
  7. srand(time());
  8. int n=,m=;
  9. int i;
  10. printf("%d %d\n",n,m);
  11. for(i=;i<=n;i++)
  12. printf("%d ",rand()%n+);
  13. printf("\n");
  14. for(i=;i<=m;i++){
  15. int l=rand()%n+,a=rand()%n+;
  16. int r=l+rand()%(n-l+),b=a+rand()%(n-a+);
  17. printf("%d %d %d %d\n",l,r,a,b);
  18. }
  19. }

data_maker

祝AC

BZOJ 3809Gty的二逼妹子序列 解题报告+data marker的更多相关文章

  1. BZOJ 3809: Gty的二逼妹子序列

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1387  Solved: 400[Submit][Status][Di ...

  2. Bzoj 3809: Gty的二逼妹子序列 莫队,分块

    3809: Gty的二逼妹子序列 Time Limit: 35 Sec  Memory Limit: 28 MBSubmit: 868  Solved: 234[Submit][Status][Dis ...

  3. 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1728  Solved: 513 Description Autumn ...

  4. [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业

    [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj   bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...

  5. 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1072  Solved: 292[Submit][Status][Di ...

  6. BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块

    BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...

  7. 3809: Gty的二逼妹子序列

    3809: Gty的二逼妹子序列 链接 分析: 和这道AHOI2013 作业差不多.权值是1~n的,所以对权值进行分块.$O(1)$修改,$O(\sqrt n)$查询. 代码: #include< ...

  8. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

  9. [AHOI2013]作业 & Gty的二逼妹子序列 莫队

    ---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...

随机推荐

  1. QuantLib 金融计算——数学工具之求解器

    目录 QuantLib 金融计算--数学工具之求解器 概述 调用方式 非 Newton 算法(不需要导数) Newton 算法(需要导数) 如果未做特别说明,文中的程序都是 Python3 代码. Q ...

  2. windows安装tesseract-OCR及使用

    tesseract是Python的一个OCR(光学字符识别)库 首先下载tesseract的exe安装文件   https://github.com/UB-Mannheim/tesseract/wik ...

  3. pycharm+gitee

    Git操作 前言: 由于各种原因,很多时候我们写代码的电脑并不会随身携带,所以有的时候突发灵感想继续写代码就变得难以实现.相信大部分同学对此都有了解,那就通过代码托管平台来管理.原本想用GitHub来 ...

  4. python全栈开发_day15_模块学习

    一:模块 1)什么是模块 每一个py文件就是一个模块 导入模块,会编译执行 1.形成一个对应的pyc文件 2.产生该模块自己的店全局名称空间 3.在使用该模块的全局名称空间中产生一个名字(导入的模块名 ...

  5. spring boot快速入门 9: 单元测试

    进行单元测试: service第一种方式: 第一步:在指定service中创建一个方法进行测试 /** * 通过ID查询一个女生的信息 * @param id * @return */ public ...

  6. JVM-ClassLoader类加载器

    类加载器: 对于虚拟机的角度来看,只存在两种类加载器: 启动类加载器(Brootstrap ClassLoader)和“其他类加载器”.启动类加载器是由C++写的,属于虚拟机的一部分,其他类加载器都是 ...

  7. WPF设置动画在控件载入时就立刻执行

    <YourControl.Triggers> <EventTrigger RoutedEvent="YourControl.Loaded"><!--这 ...

  8. 剑指offer(11-20)编程题

    二进制中1的个数 数值的整数次方 调整数组顺序使奇数位于偶数前面 链表中倒数第k个结点 反转链表 合并两个排序的链表 树的子结构 二叉树的镜像 顺时针打印矩阵 包含min函数的栈 11.输入一个整数, ...

  9. Java reflect 反射 1

    1 反射的概述 反射含义:可以获取正在运行的Java对象. JAVA反射机制是在运行状态中,对于任意一个类,都能够得到这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意一个方法; 这种动态 ...

  10. Nginx教程(6) 负载均衡

    一原理 二例子 在 nginx-1.13.0.tar.gz下测试 upstream test { server 192.168.56.90:8180 weight=1 max_fails=3 fail ...