Range Modular Queries
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的更多相关文章
- arc098E Range Minimum Queries
题意:给你一个n个数的数组,每次能够选取连续的长度为K的子序列,取出其中任意一个最小元素. 一共操作Q次.问取出的元素中Max-Min最小是多少? 标程: #include<bits/stdc+ ...
- 【hackerrank】Week of Code 30
Candy Replenishing Robot Find the Minimum Number 直接模拟 Melodious password dfs输出方案 Poles 题意:有多个仓库,只能从后 ...
- MySQL Range Optimization
8.2.1.3 Range Optimization MYSQL的Range Optimization的目的还是尽可能的使用索引 The range access method uses a sing ...
- 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 ...
- sysbench 压力测试
200 ? "200px" : this.width)!important;} --> 介绍 sysbench是一个模块化.跨平台.多线程基准测试工具,主要用于测试不同系统参 ...
- DNS(企业级)
构建DNS(企业级) 1.硬件选型 CPU:12C以上配置 内存:16G 网络:千兆 2.初始化系统配置 关闭 iptables service iptables stop chkconfig ipt ...
- DNS视图以及日志压力测试
1 访问控制列表 配置在/etc/named.conf文件的最顶端 acl innct { 192.168.1.0/24; 127.0.0.0/8; }; ...
- DNS主从服务,子域授权,view视图,日志系统,压力测试
DNS主从服务,子域授权,view视图,日志系统,压力测试 DNS性能测试工具queryperfDNS查询过程: DNS主从建立: 环境: 主服务器:10.140.165.93 从服务器:10.140 ...
- openstack通过salt-cloud创建虚拟机
saltstack有三大功能:远程执行.配置管理.云管理:saltstack的云管理就是通过salt-cloud完成的,salt-cloud是基于openstack来做的:salt-cloud能够管理 ...
随机推荐
- ubuntu12.04.5安装openssh-server所引发的血案
刚安装好的ubuntu12.04.5在安装openssh-server之后,安装其他软件都安装不了,如下: root@ubuntu:/home/lancer/software/ssh# apt-get ...
- git-ftp 用git管理ftp空间
ftp管理不能实现版本控制,而且多电脑工作时,同步很成问题. git-ftp可以完美的解决问题 下面是我的趟坑之路,本机的环境是win10,首先你的机器得装有git. git-ftp的地址https: ...
- dev 中的GridControl中的行实现选择的功能实现
1.项目有实现不GridControl中的数据导出Excel的功能,导出的时候是把所有的数据全部导出,现在要实现可供选择的灵活的导出功能.除了全选可全不选,还可以对每一行实现选择的功能.实现起来比较简 ...
- Entity Framework查询注意
首先我们看下where的方法,直接查看定义(定义如下),其实一种是对IEnumerable的扩展,一种是对IQueryable的扩展,直接看最常用的,其实区别就在IEnumerable的扩展的参数是系 ...
- .net core 利用中间件处理常见的网站功能 包括 session、routers、重定向、重写和文件下载
在.net core中所有的请求都会被请求中间件所处理,所以我们可以通过在中间件里边添加对应的功能然后在服务中添加注入来实现对应的功能 文件位置:Startup.cs=>Configure方法, ...
- Python 一行代码
Python语法十分便捷,通过几个简单例子了解其趣味 1.Fizz.Buzz问题为: 打印数字1到100, 3的倍数打印"Fizz", 5的倍数打印"Buzz" ...
- python——杂货铺
三目运算: >>> 1 if 5>3 else 0 1 >>> 1 if 5<3 else 0 0 深浅拷贝: 一.数字和字符串 对于 数字 和 字符串 ...
- linux性能之iostat
在使用linux系统的过程中,总是可能需要当前io性能的状态信息是怎么样?这里就就是一下iostat,可以通过iostat来初步查看io的状态信息. 1.常用方式 iostat -xdk 1 10 或 ...
- bzoj 3028: 食物 -- 母函数
3028: 食物 Time Limit: 3 Sec Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他 ...
- poj1269计算几何直线和直线的关系
We all know that a pair of distinct points on a plane defines a line and that a pair of lines on a p ...