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. java多线程基本概述(三)——同步块

    1.1.synchronized方法的弊端 package commonutils; public class CommonUtils { public static long beginTime1; ...

  2. Nginx Access Log日志统计分析常用命令

    Nginx Access Log日志统计分析常用命令 IP相关统计 统计IP访问量 awk '{print $1}' access.log | sort -n | uniq | wc -l 查看某一时 ...

  3. 关于AysncController的一次测试(url重写后静态页文件内容的读取是否需要使用异步?)

    因为做网站的静态页缓存,所以做了这个测试 MVC项目 准备了4个Action,分两组,一组是读取本地磁盘的一个html页面文件,一组是延时2秒 public class TestController ...

  4. HTTP 协议

    HTTP 协议对应 Web 开发者来说都必须要了解的,无论技术背景或首选编程语言是什么,"请求-响应" 对话是驱动 Web 上通信的基础. HTTP 概述 HTTP 协议是 Hyp ...

  5. 你想要的都在这里,ASP.NET Core MVC四种枚举绑定方式

    前言 本节我们来讲讲在ASP.NET Core MVC又为我们提供了哪些方便,之前我们探讨过在ASP.NET MVC中下拉框绑定方式,这节我们来再来重点看看枚举绑定的方式,充分实现你所能想到的场景,满 ...

  6. .NET遇上Docker - Docker集成Cron定时运行.NETCore(ConsoleApp)程序.md

    配置项目的Docker支持 对于VS中Docker的配置,依旧重复一些废话. 给项目添加Docker支持,VS2015可以直接使用Docker for VS插件,VS2017在安装时选择容器支持.VS ...

  7. SVM流行库LIBSvm的使用和调参

    简介:Libsvm is a simple, easy-to-use, and efficient software for SVM classification and regression. It ...

  8. HTTP协议详解以及URL具体访问过程

    1.简介 1.1.HTTP协议是什么? 即超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准.从 ...

  9. OC的内存管理(二)ARC

    指针: 指向内存的地址指针变量 存放地址的变量指针变量值 变量中存放的值(地址值)指针变量指向的内存单元值 内存地址指向的值1):强指针:默认的情况下,所有的指针都是强指针,关键字strong ):弱 ...

  10. chkconfig命令(管理开机自启)

    提供了一个简单的命令行工具来维护/etc/rc[0-6].d目录层次结构通过减轻系统管理员的直接操作任务,在这些目录中的许多符号链接.仅是简单的改变了符号链接,而非立即启动或禁止一个服务. 语法: c ...