「题解」:[AHOI2013]作业
问题: 作业
时间限制: 10 Sec 内存限制: 512 MB
题面
题目描述
此时己是凌晨两点,刚刚做了Codeforces的小A掏出了英语试卷。英语作业其实不算多,一个小时刚好可以做完。然后是一个小时可以做完的数学作业,接下来是分别都是一个小时可以做完的化学,物理,语文......小A压力巨大。
这是小A碰见了一道非常恶心的数学题,给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间表示数列的第l个数到第r个数),首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小于等于b的,且在该区间中出现过的数值的个数。
小A望着那数万的数据规模几乎绝望,只能向大神您求救,请您帮帮他吧。
输入格式
第一行n,m
接下来n个数表示数列
接下来m行,每行四个数l,r,a,b
输出格式
输出m行,分别对应每个询问,输出两个数,分别为在l到r这段区间中大小在[a,b]中的数的个数,以及大于等于a,小于等于b的,且在该区间中出现过的数值的个数(具体可以参考样例)。
题解
这题不算太难。不过帮我复习了一下树状数组。
一句话题解:莫队,放两个树状数组维护区间信息统计答案。
详细部分:
放按数据大小维护的两个树状数组,存每个数据出现的次数。一个用于维护所有数据,另一个用于维护数据是否存在(去重后的数据)。
随着莫队在区间上的伸缩不断调整树状数组内的数据,
然后利用树状数组的区间查询操作查询就好了。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define rint register long long
#define int long long
using namespace std;
int n,m,a[],l,r,t1[],t2[],cnt[],belong[],sum_q;
struct node{int l,r,id,a,b,ans1,ans2;}que[];
int lowbit(int x){return x&(-x);}
bool cmp(node xx,node yy){return belong[xx.l]==belong[yy.l]?xx.r<yy.r:xx.l<yy.l;}
bool cmp_id(node x,node y){return x.id<y.id;}
void update1(int x,int num){for(;x<=n;x+=lowbit(x))t1[x]+=num;}
void update2(int x,int num){for(;x<=n;x+=lowbit(x))t2[x]+=num;}
int query1(int x){int tot=;for(;x;x-=lowbit(x))tot+=t1[x];return tot;}
int query2(int x){int tot=;for(;x;x-=lowbit(x))tot+=t2[x];return tot;}
void add(int x){if(++cnt[x]==)update2(x,);update1(x,);}
void del(int x){if(--cnt[x]==)update2(x,-);update1(x,-);}
signed main()
{
scanf("%lld %lld",&n,&m);sum_q=sqrt(1ll*n*n/m);
for(rint i=;i<=n;++i){scanf("%lld",&a[i]);belong[i]=i/sum_q+;}
for(rint i=;i<=m;++i){scanf("%lld %lld %lld %lld",&que[i].l,&que[i].r,&que[i].a,&que[i].b);que[i].id=i;}
sort(que+,que+m+,cmp);l=que[].l,r=que[].r;
for(rint i=l;i<=r;++i)add(a[i]);
que[].ans1=query1(que[].b)-query1(que[].a-);
que[].ans2=query2(que[].b)-query2(que[].a-);
for(rint i=;i<=m;++i)
{
while(l<que[i].l){del(a[l]);l++;}while(l>que[i].l){l--;add(a[l]);}
while(r<que[i].r){r++;add(a[r]);}while(r>que[i].r){del(a[r]);r--;}
que[i].ans1=query1(que[i].b)-query1(que[i].a-);
que[i].ans2=query2(que[i].b)-query2(que[i].a-);
}
sort(que+,que+m+,cmp_id);
for(rint i=;i<=m;++i){cout<<que[i].ans1<<" "<<que[i].ans2<<endl;}
return ;
}
比日志里的那个正常一点
「题解」:[AHOI2013]作业的更多相关文章
- 「题解」「美团 CodeM 资格赛」跳格子
目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...
- 「题解」「HNOI2013」切糕
文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...
- 「题解」JOIOI 王国
「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...
- 「题解」:[loj2763][JOI2013]现代豪宅
问题 A: 现代豪宅 时间限制: 1 Sec 内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...
- 「题解」:$Six$
问题 A: Six 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...
- 「题解」:$Smooth$
问题 A: Smooth 时间限制: 1 Sec 内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...
- 「题解」:Kill
问题 A: Kill 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...
- 「题解」:y
问题 B: y 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 考虑双向搜索. 定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边 ...
- 「题解」:x
问题 A: x 时间限制: 1 Sec 内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...
随机推荐
- Aliyun 安装NPM 总是3.5.2 解决方案
由于默认的命令 阿里云安装的 Node 是 8.x 版本 导致NPM 一直安装的都是 3.5.2 版本,死活升级不上去 最后手动安装指定版本解决 wget -qO- https://deb.nodes ...
- iOS开发UITouch触摸API简介
1.UITouch简介 当用户触摸屏幕时,会创建一个UITouch对象: UITouch的作用保存着触摸相关的信息,比如触摸的位置.时间.阶段等: 当从开始到结束,系统会更新UITouch对象,结束时 ...
- 20140320 roc曲线 sizeof
1.roc曲线 http://www.zhizhihu.com/html/y2012/4076.html 2.using namespace std的缺点:程序中定义一个变量cout会被误认为是std ...
- Git仓库操作命令
创建仓库 git init 在当前目录执行,会生成.git目录文件,这个和SVN一致. 提交到仓库 git commit -m "first commit" -m:表示提交描述,必 ...
- 从0的1学习JavaSE,Jdk的安装
一.常用的dos命令 dir 罗列出当前目录的下所有文件名字 cd 路径 切换路径,该路径可以是相对于路径也可以是绝对路径 相对路径,只相对于当前的目录下的文件 绝对路径,是从盘符开始的路径地址 注意 ...
- POJ 3237 /// 树链剖分 线段树区间修改(*-1)
题目大意: 给定树的N个结点 编号为1到N 给定N-1条边的边权. 三种操作: CHANGE k w:将第 k 条边的权值改成 w. NEGATE x y:将x到y的路径上所有边的权值乘 -1. QU ...
- Jmeter---参数化之用户参数
总结: 参数化几次就要设置几个线程,执行的时候,是按顺序执行,下面的请求也会跟着请求
- note : Get FilePathName from FILE_OBJECT
转自:http://blog.csdn.net/lostspeed/article/details/11738311 封了一个函数, 从 FILE_OBJECT 中 得到 FilePathName 在 ...
- vc枚举本机端口信息
关于查看本机端口信息,可能大多数人都知道在cmd下的netstat 命令,殊不知该命令在底层也是调用相关api来实现的,相关函数有:GetTcpTableGetExtendedTcpTableGetU ...
- css---盒模型新增样式
box-shadow 以逗号分割列表来描述一个或多个阴影效果,可以用到几乎任何元素上. 如果元素同时设置了 border-radius ,阴影也会有圆角效果.多个阴影时和多个 text shadows ...