BZOJ 3236 莫队+树状数组
思路:
莫队+树状数组
(据说此题卡常数)
yzy写了一天(偷笑)
复杂度有点儿爆炸 O(msqrt(n)logn)
//By SiriusRen
#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 1005000
int n,m,a[N],pos[N],w[N],W[N],tmp,ww[N];
struct Node{int l,r,a,b,ansx,ansy,id;}node[N];
bool cmp(Node a,Node b){if(pos[a.l]==pos[b.l])return a.r<b.r;return a.l<b.l;}
bool cmp2(Node a,Node b){return a.id<b.id;}
int lowbit(int x){return x&(-x);}
int sum(int x){int ans=0;for(int i=x;i;i-=lowbit(i))ans+=w[i];return ans;}
void add(int x,int z){for(int i=x;i<=n;i+=lowbit(i))w[i]+=z;}
int sum2(int x){int ans=0;for(int i=x;i;i-=lowbit(i))ans+=ww[i];return ans;}
void add2(int x,int z){for(int i=x;i<=n;i+=lowbit(i))ww[i]+=z;}
void update(int x,int wei){
if(!W[x])add2(x,1);
add(x,wei);
W[x]+=wei;
if(!W[x])add2(x,-1);
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=m;node[i].id=i,i++)scanf("%d%d%d%d",&node[i].l,&node[i].r,&node[i].a,&node[i].b);
int block=sqrt(n);
for(int i=1;i<=n;i++)pos[i]=(i-1)/block+1;
sort(node+1,node+1+m,cmp);
for(int i=1,l=1,r=0;i<=m;i++){
for(;r<node[i].r;r++)update(a[r+1],1);
for(;r>node[i].r;r--)update(a[r],-1);
for(;l<node[i].l;l++)update(a[l],-1);
for(;l>node[i].l;l--)update(a[l-1],1);
node[i].ansx=sum(node[i].b)-sum(node[i].a-1);
node[i].ansy=sum2(node[i].b)-sum2(node[i].a-1);
}
sort(node+1,node+1+m,cmp2);
for(int i=1;i<=m;i++)
printf("%d %d\n",node[i].ansx,node[i].ansy);
}
BZOJ 3236 莫队+树状数组的更多相关文章
- BZOJ 3236: [Ahoi2013]作业(莫队+树状数组)
传送门 解题思路 莫队+树状数组.把求\([a,b]\)搞成前缀和形式,剩下的比较裸吧,用\(cnt\)记一下数字出现次数.时间复杂度\(O(msqrt(n)log(n)\),莫名其妙过了. 代码 # ...
- bzoj 3289: Mato的文件管理 莫队+树状数组
3289: Mato的文件管理 Time Limit: 40 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description Mato同学 ...
- bzoj3236 作业 莫队+树状数组
莫队+树状数组 #include<cstdio> #include<cstring> #include<iostream> #include<algorith ...
- BZOJ_3289_Mato的文件管理_莫队+树状数组
BZOJ_3289_Mato的文件管理_莫队+树状数组 Description Mato同学从各路神犇以各种方式(你们懂的)收集了许多资料,这些资料一共有n份,每份有一个大小和一个编号 .为了防止他人 ...
- 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 ...
- COGS.1822.[AHOI2013]作业(莫队 树状数组/分块)
题目链接: COGS.BZOJ3236 Upd: 树状数组实现的是单点加 区间求和,采用值域分块可以\(O(1)\)修改\(O(sqrt(n))\)查询.同BZOJ3809. 莫队为\(O(n^{1. ...
- 51nod 1290 Counting Diff Pairs | 莫队 树状数组
51nod 1290 Counting Diff Pairs | 莫队 树状数组 题面 一个长度为N的正整数数组A,给出一个数K以及Q个查询,每个查询包含2个数l和r,对于每个查询输出从A[i]到A[ ...
- 【BZOJ3460】Jc的宿舍(树上莫队+树状数组)
点此看题面 大致题意: 一棵树,每个节点有一个人,他打水需要\(T_i\)的时间,每次询问两点之间所有人去打水的最小等待时间. 伪·强制在线 这题看似强制在线,但实际上,\(pre\ mod\ 2\) ...
- HihoCoder 1488 : 排队接水(莫队+树状数组)
描述 有n个小朋友需要接水,其中第i个小朋友接水需要ai分钟. 由于水龙头有限,小Hi需要知道如果为第l个到第r个小朋友分配一个水龙头,如何安排他们的接水顺序才能使得他们等待加接水的时间总和最小. 小 ...
随机推荐
- Redis散杂记
Redis是一款很火的KV模式的内存数据库,与众不同的特点: 1.数据存储在内存 内存的读取速度仅次于CPU的寄存器.各等级缓存,“英雄”自动敏捷属性,特点就是快.高效.因此不需要类似存储磁盘的数据库 ...
- JavaScript系列——数组元素左右移动N位算法实现
引言 在自己刚刚毕业不久的时候,去了一家公司面试,面试官现场考了我这道题,我记忆深刻,当时没有想到思路,毫无疑问被面试官当成菜鸟了.最近刚好在研究数组的各种算法实现,就想到这道题,可以拿来实现一下,纪 ...
- 紫书 习题 11-9 UVa 12549 (二分图最小点覆盖)
用到了二分图的一些性质, 最大匹配数=最小点覆盖 貌似在白书上有讲 还不是很懂, 自己看着别人的博客用网络流写了一遍 反正以后学白书应该会系统学二分图的,紫书上没讲深. 目前就这样吧. #includ ...
- 紫书 习题 8-21 UVa 1621 (问题分析方法)
知道是构造法但是想了挺久没有什么思路. 然后去找博客竟然只有一篇!!https://blog.csdn.net/no_name233/article/details/51909300 然后博客里面又说 ...
- ocrsearch的横屏转竖屏的解决方案
//这是其中解决预览图的一部分(坑了好久的)@Override public void onPreviewFrame(byte[] data, Camera camera) { Size previe ...
- 【转】C#正则表达式教程和示例
[转]C#正则表达式教程和示例 有一段时间,正则表达式学习很火热很潮流,当时在CSDN一天就能看到好几个正则表达式的帖子,那段时间借助论坛以及Wrox Press出版的<C#字符串和正则表达式参 ...
- linux 安装 redis3.0
下载 解压 进入目录 编译 $ wget http://download.redis.io/releases/redis-3.2.0.tar.gz $ tar xzf redis-3.0.0.tar. ...
- MapReduce 的类型与格式【编写最简单的mapreduce】(1)
hadoop mapreduce 中的map 和reduce 函数遵循下面的形式 map: (K1, V1) → list(K2, V2) reduce: (K2, list(V2)) → list( ...
- 转:移动建站工具(一):分秒钟将Web网站移动化
作者唐小引 移动建站工具Web移动化简易开发MobifyTOPMobile Joomla!MoFuseWordPress优化 摘要:时下移动端显然已是诸多企业都想要占领的重要阵地.但限于较小的屏幕 ...
- [luogu P3360] 偷天换日 解题报告(树形DP)
题目链接:https://www.luogu.org/problemnew/show/P3360 题解: 首先我们把边上的消耗放到向下的点上,如果是叶子节点的话就先做一次0/1背包 发现这是一颗二叉树 ...