Range Modular Queries

题意

给出一个数列,q个查询,问查询区间内有几个数 a[i] % x == y。

分析

其实裸的分块就能过了,跑的还特别快。

这里分块的作用就是排序。

在x较小时可以暴力打表,x较大时枚举显得更加高效。

code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 4e4 + 10;
const int BLOCK = 200;
int n, q, L, R;
int a[MAXN];
int ans[MAXN];
int mp[4 * MAXN];
struct block
{
int l, r, x, y;
int id, bid;
bool operator < (const block& other) const
{
if(bid == other.bid) return r < other.r;
return bid < other.bid;
}
}b[MAXN]; void query(int l, int r, int id, int x, int y)
{
if(id)
{
for(int i = l; i < L; i++) mp[a[i]]++;
for(int i = R + 1; i <= r; i++) mp[a[i]]++;
for(int i = L; i < l; i++) mp[a[i]]--;
for(int i = r + 1; i <= R; i++) mp[a[i]]--;
}
else
{
for(int i = l; i <= r; i++)
mp[a[i]]++;
}
for(int i = 0; i < MAXN; i += x)
ans[b[id].id] += mp[i + y];
L = l; R = r;
} int main()
{
scanf("%d%d", &n, &q);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
for(int i = 0; i < q; i++)
{
scanf("%d%d%d%d", &b[i].l, &b[i].r, &b[i].x, &b[i].y);
b[i].id = i;
b[i].bid = b[i].l / BLOCK;
}
sort(b, b + q);
for(int i = 0; i < q; i++) query(b[i].l, b[i].r, i, b[i].x, b[i].y);
for(int i = 0; i < q; i++) printf("%d\n", ans[i]);
return 0;
}

code

#include<bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
const int MAXN = 4e4 + 10;
const int MAXK = 205;
int a[MAXN], b[MAXN];
vector<int> pos[MAXK][MAXK];
vector<int> poss[MAXN];
int main()
{
int n, q;
scanf("%d%d", &n, &q);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
for(int i = 1; i < MAXK; i++)
for(int j = 0; j < n; j++)
pos[i][a[j] % i].push_back(j);
for(int i = 0; i < n; i++)
{
poss[a[i]].push_back(i);
}
while(q--)
{
int l, r, x, y;
scanf("%d%d%d%d", &l, &r, &x, &y);
if(x < MAXK) // 打表
{
int ans = upper_bound(all(pos[x][y]), r) - lower_bound(all(pos[x][y]), l);
printf("%d\n", ans);
}
else // x >= MAXK ,下面的循环会非常高效
{
int ans = 0;
for(int i = y; i < MAXN; i += x)
{
ans += upper_bound(all(poss[i]), r) - lower_bound(all(poss[i]), l);
}
printf("%d\n", ans);
}
}
return 0;
}

Range Modular Queries的更多相关文章

  1. arc098E Range Minimum Queries

    题意:给你一个n个数的数组,每次能够选取连续的长度为K的子序列,取出其中任意一个最小元素. 一共操作Q次.问取出的元素中Max-Min最小是多少? 标程: #include<bits/stdc+ ...

  2. 【hackerrank】Week of Code 30

    Candy Replenishing Robot Find the Minimum Number 直接模拟 Melodious password dfs输出方案 Poles 题意:有多个仓库,只能从后 ...

  3. MySQL Range Optimization

    8.2.1.3 Range Optimization MYSQL的Range Optimization的目的还是尽可能的使用索引 The range access method uses a sing ...

  4. mysql的TABLE_SCHEMA的sql和information_schema表, MySQL管理一些基础SQL语句, Changes in MySQL 5.7.2

    3.查看库表的最后mysql修改时间, 如果第一次新建的表可能还没有update_time,所以这里用了ifnull,当update_time为null时用create_time替代 select T ...

  5. sysbench 压力测试

    200 ? "200px" : this.width)!important;} --> 介绍 sysbench是一个模块化.跨平台.多线程基准测试工具,主要用于测试不同系统参 ...

  6. DNS(企业级)

    构建DNS(企业级) 1.硬件选型 CPU:12C以上配置 内存:16G 网络:千兆 2.初始化系统配置 关闭 iptables service iptables stop chkconfig ipt ...

  7. DNS视图以及日志压力测试

    1    访问控制列表 配置在/etc/named.conf文件的最顶端    acl innct {        192.168.1.0/24;        127.0.0.0/8;    }; ...

  8. DNS主从服务,子域授权,view视图,日志系统,压力测试

    DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...

  9. openstack通过salt-cloud创建虚拟机

    saltstack有三大功能:远程执行.配置管理.云管理:saltstack的云管理就是通过salt-cloud完成的,salt-cloud是基于openstack来做的:salt-cloud能够管理 ...

随机推荐

  1. C++ count_if/erase/remove_if 用法详解

    每次使用这几个算法时都要去查CPP reference,为了能够加深印象,整理一下基本应用. cout/cout_if:  return the number of elements satisfyi ...

  2. angular directive

    1.restrict (字符串)可选参数,指明指令在DOM里面以什么形式被声明: 取值有:E(元素),A(属性),C(类),M(注释),其中默认值为A: E(元素):<directiveName ...

  3. Linux防火墙配置—SNAT1

    1.实验目标 以实验"防火墙配置-访问外网WEB"为基础,在WEB服务器上安装Wireshark,设置Wireshark的过滤条件为捕获HTTP报文,在Wireshark中开启捕获 ...

  4. 第三章 Docker的镜像

    3.1.获取镜像 获取镜像 docker pull name[:TAG] #默认是从网络下载镜像,不指定tag会人下载latest标签下的镜像. 1 2 docker search ubuntu do ...

  5. Android之AIDL知识总结

    1.AIDL介绍 AIDL是一个缩写,全称是Android Interface Definition Language,翻译为Android接口定义语言.主要用于线程之间的通信,本文主要以不同应用之间 ...

  6. 一个只有99行代码的JS流程框架(二)

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 张镇圳,腾讯Web前端高级工程师,对内部系统前端建设有多年经验,喜欢钻研捣鼓各种前端组件和框架. 导语 前面写 ...

  7. openresty源码剖析——lua代码的加载

    ##Openresty是什么 OpenResty是一个基于 Nginx 与 Lua 的高性能 Web 平台,通过把lua嵌入到Nginx中,使得我们可以用轻巧的lua语言进行nginx的相关开发,处理 ...

  8. PHP命名空间理解

    这玩意就是路径! 这玩意就是路径! 这玩意就是路径! 这玩意就是路径! 这玩意就是路径! use 就是声明要用某个路径的文件(类) 再有namespace的情况下,就类似于已经在一个路径里了 这个时候 ...

  9. MAMP 环境下为 php 添加 pcntl 扩展

    前言: pcntl 介绍 pcntl 扩展可以支持 PHP 的多线程操作.(非Unix类系统不支持此模块) phpize 介绍 phpize 可以用来给 PHP 动态的添加扩展.比如编译 PHP 时忘 ...

  10. java并发程序——BlockingQueue

    概述 BlockingQueue顾名思义'阻塞的队列',是指在:队列的读取行为被阻塞直到队列不为空时,队列的写入行为被阻塞直到队列不满时.BlockingQueue是java.util.concurr ...