P4396 [AHOI2013]作业

题目描述

详见:P4396 [AHOI2013]作业

solution

莫队+树状数组的裸题(莫队+分块,CDQ分治都可以,莫队+线段树大概需要卡常)。

时间复杂度   

Code

#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+50;inline int read()
{int f=1,x=0; char c=getchar();while (c<'0'||c>'9') { if (c=='-') f=-1; c=getchar(); }while (c>='0'&&c<='9') { x=(x<<3)+(x<<1)+(c^48); c=getchar(); }return x*f;
}int n,m,Size,Ans1[MAXN],Ans2[MAXN],a[MAXN],cnt[MAXN];
struct pnode{int l,r,a,b,id,x; } p[MAXN];
struct Tree_Array
{int tree[MAXN<<1];int lowbit(int x){ return x&(-x); }void change(int x,int y) { for (;x<=n;x+=lowbit(x)) tree[x]+=y; }int query(int x){ int ans=0; for (;x;x-=lowbit(x)) ans+=tree[x]; return ans; }
} tree1,tree2;
int compare(pnode x,pnode y){ return (x.x<y.x)||(x.x==y.x&&x.r<y.r); }
int main()
{n=read(),m=read(),Size=trunc(sqrt(n));for (int i=1;i<=n;i++) a[i]=read();for (int i=1;i<=m;i++){p[i].l=read(),p[i].r=read(),p[i].a=read(),p[i].b=read();p[i].id=i,p[i].x=(p[i].l-1)/Size+1;}sort(p+1,p+m+1,compare);int L=1,R=0;for (int i=1;i<=m;i++){while (L<p[i].l) cnt[a[L]]--,tree1.change(a[L],-1),tree2.change(a[L],cnt[a[L]]==0?-1:0),L++;while (L>p[i].l) L--,cnt[a[L]]++,tree1.change(a[L], 1),tree2.change(a[L],cnt[a[L]]==1? 1:0);while (R<p[i].r) R++,cnt[a[R]]++,tree1.change(a[R], 1),tree2.change(a[R],cnt[a[R]]==1? 1:0);while (R>p[i].r) cnt[a[R]]--,tree1.change(a[R],-1),tree2.change(a[R],cnt[a[R]]==0?-1:0),R--;Ans1[p[i].id]=tree1.query(p[i].b)-tree1.query(p[i].a-1);Ans2[p[i].id]=tree2.query(p[i].b)-tree2.query(p[i].a-1);}for (int i=1;i<=m;i++) printf("%d %d\n",Ans1[i],Ans2[i]);return 0;
}

P4396 [AHOI2013]作业相关推荐

  1. P4396 [AHOI2013]作业 cdq分治

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数列aaa,有qqq个询问,每次询问[l,r][l,r][l,r]中值域在[a,b][a,b][a,b]中的数出现的次数和在[a,b][ ...

  2. BZOJ 3236[AHOI2013]作业

    题面: 3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MB Submit: 1704  Solved: 685 [Submit][ ...

  3. Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组

    题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...

  4. [AHOI2013]作业

    先知道这道题目的所求 求出一个 \(num_i\) 使 \(a\leq num_i\leq b\) 且在 \(l\leq place_i\leq r\).然后统计 \(num_i\) 的个数. 求出一 ...

  5. BZOJ3236 [Ahoi2013]作业

    昨天晚上做的...差错一直查到今天= = 最后没办法问管理员要了数据才知道原来ans数组开小了233,简直沙茶 这道题不就是裸的莫队嘛= =||| 只要用树状数组维护当前的两种个数即可. 1 /*** ...

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

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

  7. 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 ...

  8. [BZOJ3236][Ahoi2013]作业(莫队+树状数组)

    此题的询问是一个位置和权值都有限制的二维区间,但是题目具备无修改和允许离线两个条件,可以用莫队算法解决. 一个想法是:用莫队维护位置,树状数组维护权值. 具体的说,用一个数组 cnt cnt,维护莫队 ...

  9. Jozky 刷题目录

    文章目录 本目录参考OI-Wiki 还未解决专区 算法基础 枚举 模拟 递归&分治 贪心 排序 前缀和&差分 二分 倍增 构造 搜索 DFS && BFS 双向搜索 启 ...

最新文章

  1. 自然语言推理:使用注意力机制
  2. AndroidManifest.xml文件剖析
  3. 启用日志调试Kerberos登录验证问题
  4. jmap之使用说明与JVM配置
  5. retain、strong、weak、assign区别
  6. matlab levy,Levy Flight 模型及Matlab实现
  7. 【同行说技术】Java程序员小白变大神必读资料汇总(三)
  8. 电子电路仿真软件中文版_电路仿真软件详谈(六),Proteus电路仿真软件的超级应用...
  9. 实时数仓入门训练营:Hologres 数据导入/导出实践
  10. 计算机培训通知,关于开展上海师范大学2018年计算机办公自动化免费培训的通知...
  11. c语言将阿拉伯数字变为大写,使用C#实现阿拉伯数字到大写中文的转换
  12. med4way:中介效应和交互效应分析
  13. 走近棒球运动·亚特兰大勇士队·MLB棒球创造营
  14. 自定义注解(中英文字段名字映射)
  15. [CTSC2016]时空旅行 (线段树分治)
  16. 虚拟地址,虚拟地址空间, 交换分区
  17. web.Response
  18. tf2.0 实现DeepFM
  19. STP和RSTP详解-原理篇
  20. cct计算机考试介绍(全)

热门文章

  1. 神奇的机械动态图,看了一遍又一遍!最后一个真神奇~
  2. 如何保持纯洁男女关系……
  3. 男朋友和女朋友的区别。。。
  4. wdcp服务器/虚拟主机管理系统,wdcp服务器/虚拟主机管理系统1.1发布(最后更新20110423)...
  5. android布局中画圆角矩形,Android 自定义View之圆角矩形轨迹图
  6. c语言分配多一个字符空间,关于C语言动态给字符串分配内存空间问题
  7. linux perl模块检测,Linux有问必答:如何用Perl检测Linux的发行版本
  8. python 中文编码差异_Python 编码为什么那么蛋疼?
  9. ajax jquery php_基于Ajax jquery的使用php登录
  10. layui上传报错会有哪些原因_一到冬天,为什么会比别人更怕冷?有哪些原因?...