问题: 作业

时间限制: 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]作业的更多相关文章

  1. 「题解」「美团 CodeM 资格赛」跳格子

    目录 「题解」「美团 CodeM 资格赛」跳格子 题目描述 考场思路 思路分析及正解代码 「题解」「美团 CodeM 资格赛」跳格子 今天真的考自闭了... \(T1\) 花了 \(2h\) 都没有搞 ...

  2. 「题解」「HNOI2013」切糕

    文章目录 「题解」「HNOI2013」切糕 题目描述 思路分析及代码 题目分析 题解及代码 「题解」「HNOI2013」切糕 题目描述 点这里 思路分析及代码 题目分析 这道题的题目可以说得上是史上最 ...

  3. 「题解」JOIOI 王国

    「题解」JOIOI 王国 题目描述 考场思考 正解 题目描述 点这里 考场思考 因为时间不太够了,直接一上来就着手暴力.但是本人太菜,居然暴力爆 000 ,然后当场自闭- 一气之下,发现对 60pts ...

  4. 「题解」:[loj2763][JOI2013]现代豪宅

    问题 A: 现代豪宅 时间限制: 1 Sec  内存限制: 256 MB 题面 题目描述 (题目译自 $JOI 2013 Final T3$「現代的な屋敷」) 你在某个很大的豪宅里迷路了.这个豪宅由东 ...

  5. 「题解」:$Six$

    问题 A: Six 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 来写一篇正经的题解. 每一个数对于答案的贡献与数本身无关,只与它包含了哪几个质因数有关. 所以考虑二 ...

  6. 「题解」:$Smooth$

    问题 A: Smooth 时间限制: 1 Sec  内存限制: 512 MB 题面 题面谢绝公开. 题解 维护一个队列,开15个指针,对应前15个素数. 对于每一次添加数字,暴扫15个指针,将指针对应 ...

  7. 「题解」:Kill

    问题 A: Kill 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 80%算法 赛时并没有想到正解,而是选择了另一种正确性较对的贪心验证. 对于每一个怪,我们定义它的 ...

  8. 「题解」:y

    问题 B: y 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 考虑双向搜索. 定义$cal_{i,j,k}$表示当前已经搜索状态中是否存在长度为i,终点为j,搜索过边 ...

  9. 「题解」:x

    问题 A: x 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 赛时想到了正解并且对拍了很久.对拍没挂,但是评测姬表示我w0了……一脸懵逼. 不难证明,如果对于两个数字 ...

随机推荐

  1. ASP.NET MVC Controller激活系统详解2

    一.引言 此篇博文紧接上篇博文进行阐述,本篇博文阐述的主题是Controller激活和url路由 二.总述 ASP.NET路由系统是HTTP请求抵达服务端的第一道屏障,它根据注册的路由规则对拦截的请求 ...

  2. Soldier and Number Game-素数筛

    Two soldiers are playing a game. At the beginning first of them chooses a positive integer n and giv ...

  3. java_函数式编程写法

    package cn.aikang.Test; import org.junit.Test; import java.util.Scanner; import java.util.function.S ...

  4. window下apache2.2配置多个tomcat使用不同二级域名,共用80端口

    思路:分3步, 1,安装apache服务器httpd-2.2.25-win32-x86-no_ssl.msi,安装tomcat 2,配置tomcat默认访问的项目,配置apache服务器 3,测试 第 ...

  5. java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串

    package com.oop.util; import java.text.*; import java.util.UUID; import org.junit.Test; /* * 与日期相关的工 ...

  6. Impala简介

  7. 搭建HDFS HA

    搭建HDFS HA 1.服务器角色规划 hd-01(192.168.1.99) hd-02 (192.168.1.100) hd-03 (192.168.1.101) NameNode NameNod ...

  8. ransformResourcesWithMergeJavaResForDebug问题

    错误内容: Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > java.i ...

  9. Hadoop配置lzo

    编译: 0. 环境准备 maven(下载安装,配置环境变量,修改sitting.xml加阿里云镜像) gcc-c++ zlib-devel autoconf automake libtool 通过yu ...

  10. Perl 标量

    Perl 标量 标量是一个简单的数据单元. 标量可以是一个整数,浮点数,字符,字符串,段落或者一个完整的网页. 以下实例演示了标量的简单应用: 实例 #!/usr/bin/perl $age = 20 ...