昨天晚上做的。。。差错一直查到今天= =

最后没办法问管理员要了数据才知道原来ans数组开小了233,简直沙茶

这道题不就是裸的莫队嘛= =|||

只要用树状数组维护当前的两种个数即可。

  1 /**************************************************************
  2     Problem: 3236
  3     User: rausen
  4     Language: C++
  5     Result: Accepted
  6     Time:79318 ms
  7     Memory:66252 kb
  8 ****************************************************************/
  9
 10 #include <cstdio>
 11 #include <cmath>
 12 #include <algorithm>
 13
 14 #define lowbit(x) x & -x
 15 using namespace std;
 16 const int N = 100005;
 17 const int M = 1000005;
 18 const int Maxlen = 37000005;
 19
 20 int n, size, Q;
 21 int BIT[2][N], cnt[N], pos[N], a[N];
 22 int ans1[M], ans2[M];
 23 int Len, Left;
 24 char buf[Maxlen];
 25
 26 struct Query {
 27     int l, r, a, b, w;
 28 } q[M];
 29 inline bool operator < (const Query &a, const Query &b) {
 30     return pos[a.l] == pos[b.l] ? a.r < b.r : pos[a.l] < pos[b.l];
 31 }
 32 inline bool cmp_id (const Query &a, const Query &b) {
 33     return a.w < b.w;
 34 }
 35
 36 inline int read() {
 37     int x = 0;
 38     while (buf[Left] < '0' || '9' < buf[Left])
 39         ++Left;
 40     while ('0' <= buf[Left] && buf[Left] <= '9')
 41         x = x * 10 + buf[Left++] - '0';
 42     return x;
 43 }
 44
 45 int len = 0, pr[15];
 46 inline void print(int x) {
 47     while (x)
 48         pr[++len] = x % 10, x /= 10;
 49     if (!len) putchar('0');
 50     while (len)
 51         putchar(pr[len--] + '0');
 52 }
 53
 54 inline void update(int x, int del, int T) {
 55     while (x <= n)
 56         BIT[T][x] += del, x += lowbit(x);
 57 }
 58
 59 inline int query(int x, int T) {
 60     int res = 0;
 61     while (x)
 62         res += BIT[T][x], x -= lowbit(x);
 63     return res;
 64 }
 65
 66 inline void update(int x, int del) {
 67     if (!cnt[x])
 68         update(x, 1, 1);
 69     cnt[x] += del;
 70     if (!cnt[x])
 71         update(x, -1, 1);
 72     update(x, del, 0);
 73 }
 74
 75 int main() {
 76     int i, l, r;
 77     Len = fread(buf, 1, Maxlen, stdin);
 78     buf[Len] = ' ';
 79     n = read(), Q = read();
 80     size = (int) sqrt(n);
 81     for (i = 1; i <= n; ++i)
 82         a[i] = read(), pos[i] = i / size;
 83     for (i = 1; i <= Q; ++i) {
 84         q[i].l = read(), q[i].r = read();
 85         q[i].a = read(), q[i].b = read();
 86         q[i].w = i;
 87     }
 88
 89     sort(q + 1, q + Q + 1);
 90     for (i = l = 1, r = 0; i <= Q; ++i) {
 91         for (; r < q[i].r; ) update(a[++r], 1);
 92         for (; r > q[i].r; ) update(a[r--], -1);
 93         for (; l < q[i].l; ) update(a[l++], -1);
 94         for (; l > q[i].l; ) update(a[--l], 1);
 95         ans1[q[i].w] = query(q[i].b, 0) - query(q[i].a - 1, 0);
 96         ans2[q[i].w] = query(q[i].b, 1) - query(q[i].a - 1, 1);
 97     }
 98     for (i = 1; i <= Q; ++i) {
 99         print(ans1[i]), putchar(' ');
100         print(ans2[i]), putchar('\r'), putchar('\n');
101     }
102     return 0;
103 }

View Code

(p.s. 这道题Rank 1的5 sec是怎么做到的= =,蒟蒻可是用了80 sec啊!!!)

转载于:https://www.cnblogs.com/rausen/p/4108541.html

BZOJ3236 [Ahoi2013]作业相关推荐

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

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

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

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

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

  4. BZOJ 3236[AHOI2013]作业

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

  5. P4396 [AHOI2013]作业 cdq分治

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

  6. P4396 [AHOI2013]作业

    P4396 [AHOI2013]作业 题目描述 详见:P4396 [AHOI2013]作业 solution 莫队+树状数组的裸题(莫队+分块,CDQ分治都可以,莫队+线段树大概需要卡常). 时间复杂 ...

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

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

  8. [AHOI2013]作业

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

  9. BZOJ3809: Gty的二逼妹子序列

    BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...

最新文章

  1. android上垂直跑马灯,android textview 垂直滚动and水平跑马灯
  2. 社交重构、游戏革新,万物皆可元宇宙?这场大会给你讲清楚了|活动预告
  3. 基于Docker的Consul服务发现集群搭建
  4. Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
  5. 无法将 DBNull.Value 强制转换为类型“System.DateTime”。请使用可空类型
  6. 12012.memtester内存测试
  7. 规划系统_智慧水务规划系统思维的设计思考
  8. 如何经由PHP获得MySQL procedure结果
  9. Thinking in C++ ----第二章 对象的创建和使用
  10. 废柴日记之中秋特辑:那些年我们一直分不清楚的近义词们①
  11. 视频压制相关工具下载
  12. 中超16强内援转会更新 陕西重金打造中国银河战舰
  13. Linux中不同文字颜色代表的含义
  14. 机器学习之逻辑回归原理
  15. Spring+jdbc的例子
  16. 用verilog 蜂鸣器的演奏乐曲
  17. 红米note2位置服务器,红米Note2
  18. 响应式图像--图片自适应大小
  19. 小根堆创建,插入,删除,排序等操作图解
  20. SQL专项复习(使用GROUP BY, WITH AS)——习题篇02

热门文章

  1. Linux 内核源代码的目录结构
  2. easyexcel和poi对比_POI 和 EasyExcel
  3. python的open方法_Python os.open() 方法
  4. 返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法
  5. python 动态规划_DP动态规划(Python实现)
  6. java socket编程实现聊天程序_java Socket编程 聊天程序 服务器端和客户端
  7. 从全职高手开始的系统_动画全职高手第二季热血回归,腾讯视频的国漫IP全链路开发之道...
  8. b树索引 java_B树索引最通俗易懂的介绍
  9. 【TensorFlow-windows】学习笔记一——基础理解
  10. ZDOzMRVAOq