BZOJ3236 [Ahoi2013]作业
昨天晚上做的。。。差错一直查到今天= =
最后没办法问管理员要了数据才知道原来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]作业相关推荐
- Bzoj3236:[Ahoi2013]作业:莫队算法+树状数组
题目链接:3236:[Ahoi2013]作业 这题-- 很水的一道莫队,只要用一个树状数组维护数值出现的前缀和就行就行 然而-- 可怜的我真是T得蛋疼了QAQ 先是写了一发裸莫队,T 卧槽T了? 快速 ...
- 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 ...
- [BZOJ3236][Ahoi2013]作业(莫队+树状数组)
此题的询问是一个位置和权值都有限制的二维区间,但是题目具备无修改和允许离线两个条件,可以用莫队算法解决. 一个想法是:用莫队维护位置,树状数组维护权值. 具体的说,用一个数组 cnt cnt,维护莫队 ...
- BZOJ 3236[AHOI2013]作业
题面: 3236: [Ahoi2013]作业 Time Limit: 100 Sec Memory Limit: 512 MB Submit: 1704 Solved: 685 [Submit][ ...
- P4396 [AHOI2013]作业 cdq分治
传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数列aaa,有qqq个询问,每次询问[l,r][l,r][l,r]中值域在[a,b][a,b][a,b]中的数出现的次数和在[a,b][ ...
- P4396 [AHOI2013]作业
P4396 [AHOI2013]作业 题目描述 详见:P4396 [AHOI2013]作业 solution 莫队+树状数组的裸题(莫队+分块,CDQ分治都可以,莫队+线段树大概需要卡常). 时间复杂 ...
- [BZOJ 3236] [Ahoi2013] 作业 [BZOJ 3809] 【莫队(+分块)】
题目链接: BZOJ - 3236 BZOJ - 3809 算法一:莫队 首先,单纯的莫队算法是很好想的,就是用普通的第一关键字为 l 所在块,第二关键字为 r 的莫队. 这样每次端点移动添加或删 ...
- [AHOI2013]作业
先知道这道题目的所求 求出一个 \(num_i\) 使 \(a\leq num_i\leq b\) 且在 \(l\leq place_i\leq r\).然后统计 \(num_i\) 的个数. 求出一 ...
- BZOJ3809: Gty的二逼妹子序列
BZOJ3809: Gty的二逼妹子序列 又是一道权限题... 本蒟蒻没钱氪金... 附上洛谷题面: 洛谷P4867 Gty的二逼妹子序列 题目描述 Autumn和Bakser又在研究Gty的妹子序列 ...
最新文章
- android上垂直跑马灯,android textview 垂直滚动and水平跑马灯
- 社交重构、游戏革新,万物皆可元宇宙?这场大会给你讲清楚了|活动预告
- 基于Docker的Consul服务发现集群搭建
- Portal-Basic Java Web 应用开发框架:应用篇(十四) —— 异步 Action
- 无法将 DBNull.Value 强制转换为类型“System.DateTime”。请使用可空类型
- 12012.memtester内存测试
- 规划系统_智慧水务规划系统思维的设计思考
- 如何经由PHP获得MySQL procedure结果
- Thinking in C++ ----第二章 对象的创建和使用
- 废柴日记之中秋特辑:那些年我们一直分不清楚的近义词们①
- 视频压制相关工具下载
- 中超16强内援转会更新 陕西重金打造中国银河战舰
- Linux中不同文字颜色代表的含义
- 机器学习之逻辑回归原理
- Spring+jdbc的例子
- 用verilog 蜂鸣器的演奏乐曲
- 红米note2位置服务器,红米Note2
- 响应式图像--图片自适应大小
- 小根堆创建,插入,删除,排序等操作图解
- SQL专项复习(使用GROUP BY, WITH AS)——习题篇02
热门文章
- Linux 内核源代码的目录结构
- easyexcel和poi对比_POI 和 EasyExcel
- python的open方法_Python os.open() 方法
- 返回后的数据处理_【掘金使用技巧2】掘金返回数据中时间的处理方法
- python 动态规划_DP动态规划(Python实现)
- java socket编程实现聊天程序_java Socket编程 聊天程序 服务器端和客户端
- 从全职高手开始的系统_动画全职高手第二季热血回归,腾讯视频的国漫IP全链路开发之道...
- b树索引 java_B树索引最通俗易懂的介绍
- 【TensorFlow-windows】学习笔记一——基础理解
- ZDOzMRVAOq