17997 Simple Counting

时间限制:2000MS  内存限制:65535K
提交次数:0 通过次数:0

题型: 编程题   语言: 不限定

Description

Ly is crazy about counting . Recently , he got a simple problem , but he had to learn Gaoshu these days .So , he turns to you for help .
You are given a sequence A with n positive integers numbered from 1 to n , and then expected to answer Q queries .
Each queries contains an interval [L,R] , you should find the number of index i which satisfies :
{i | Ai mod (i-L+1) = 0 , L <= i <= R }

where Ai mod (i-L+1) = 0 means that Ai can be divided by (i-L+1) .

输入格式

The first line of the input is an integer T , indicates the number of test cases .
Then T cases followed. For each test case :
The first line contains two integers n, Q .
The second line contains n positive integers A1, A2, …. An .
The next Q line , each line contains two integers L, R. Data range :
1<= T <= 20
1 <= n, Q <= 20000
1<= Ai <= 50000
1<= L <= R <= n

输出格式

For each query, output a single line with an integer indicates the answer expected .

输入样例

2
5 2
1 2 3 4 5
1 5
3 5 6 3
10 7 3 6 24 11
1 3
2 5
5 6

输出样例

5
2
2
3
1

提示

Huge input, scanf is preferred for C/C++.

During first sample ,
for the first query ,A1 mod 1 = 0 , A2 mod 2 = 0 , A3 mod 3 = 0 , A4 mod 4 = 0 ,A5 mod 5 = 0 , so the answer is 5 ;
for the second query , A3 mod 1 = 0 , A4 mod 2 = 0 , A5 mod 3 != 0 , so the answer is 2 .

给定n个数字和m次询问,每次给定区间[L, R],然后问a[L] % 1 == 0?  a[L + 1] % 2 == 0?,统计答案。

思路:考虑固定左端点L, 就是,对于每一个数字a[i],首先我们已经知道他在数组里的位置是i。

那么如果k是他的约数的话。如果真有询问问到它是否%k==0?,那么这个时候它应该从哪里开始这段区间的询问呢?

应该要在[i - k + 1, ]处吧,因为i - L + 1 = k。得到L等于这个。

然后就可以用一个vector[L]来保存,以L为开始的区间询问,那些位置会是得到ans的。然后二分小于等于R的个数就可以了。

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#define IOS ios::sync_with_stdio(false)
using namespace std;
#define inf (0x3f3f3f3f)
typedef long long int LL; #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
const int maxn = + ;
vector<int>pos[maxn];
void work() {
int n, m;
scanf("%d%d", &n, &m);
for (int i = ; i <= n; ++i) {
pos[i].clear();
}
for (int i = ; i <= n; ++i) {
int x;
scanf("%d", &x);
int end = (int)sqrt(x * 1.0);
for (int j = ; j <= end; ++j) {
if (x % j == ) {
int L = i - j + ;
if (L >= ) {
pos[L].push_back(i);
} else break;
if (x / j == j) continue;
L = i - (x / j) + ;
if (L >= ) {
pos[L].push_back(i);
}
}
}
}
for (int i = ; i <= n; ++i) {
sort(pos[i].begin(), pos[i].end());
}
for (int i = ; i <= m; ++i) {
int L, R;
scanf("%d%d", &L, &R);
int ans = upper_bound(pos[L].begin(), pos[L].end(), R) - pos[L].begin();
printf("%d\n", ans);
}
} int main() {
#ifdef local
freopen("data.txt","r",stdin);
#endif
int t;
scanf("%d", &t);
while (t--) work();
return ;
}

17997 Simple Counting 数学的更多相关文章

  1. Codeforces 911D. Inversion Counting (数学、思维)

    题目链接:Inversion Counting 题意: 定义数列{ai|i=1,2,...,n}的逆序对如下:对于所有的1≤j<i≤n,若ai<aj,则<i,j>为一个逆序对. ...

  2. TOJ 1258 Very Simple Counting

    Description Let f(n) be the number of factors of integer n. Your task is to count the number of i(1 ...

  3. ACM学习历程—HDU5490 Simple Matrix (数学 && 逆元 && 快速幂) (2015合肥网赛07)

    Problem Description As we know, sequence in the form of an=a1+(n−1)d is called arithmetic progressio ...

  4. 「10.8」simple「数学」·walk「树上直径」

    A. Simple 本来以为很难,考场瞎推了推好像会了...... 想起小凯的诱惑,迷?? 首先$n$,$m$,$q$同除$gcd(n,m)$,显然$q$以内的数假如不是$gcd$的倍数,那么一定不能 ...

  5. UVA 11401 - Triangle CountingTriangle Counting 数学

    You are given n rods of length 1,2, . . . , n. You have to pick any 3 of them and build a triangle. ...

  6. [CSP-S模拟测试]:Simple(数学)

    题目描述 对于给定正整数$n,m$,我们称正整数$c$为好的,当且仅当存在非负整数$x,y$,使得$n\times x+m\times y=c$. 现在给出多组数据,对于每组数据,给定$n,m,q$, ...

  7. zoj 3286 Very Simple Counting---统计[1,N]相同因子个数

    Very Simple Counting Time Limit: 1 Second      Memory Limit: 32768 KB Let f(n) be the number of fact ...

  8. 13 Stream Processing Patterns for building Streaming and Realtime Applications

    原文:https://iwringer.wordpress.com/2015/08/03/patterns-for-streaming-realtime-analytics/ Introduction ...

  9. [C5] Andrew Ng - Structuring Machine Learning Projects

    About this Course You will learn how to build a successful machine learning project. If you aspire t ...

随机推荐

  1. tomcat 启动增加参数

    linux: JAVA_OPTS="$JAVA_OPTS  -Dconfig.type=inte2 -Xms2048m -Xmx2048m -XX:PermSize=128m -XX:Max ...

  2. jquery跨域3

    这两天用 Jquery 跨域取数据的时候,经常碰到 invalid label 这个错误,十分的郁闷,老是取不到服务器端发送回来的 json 值, 一般跨域用到的两个方法为:$.ajax 和$.get ...

  3. 微信小程序内嵌网页能力开放 小程序支持内嵌网页文档说明

    为了方便开发者灵活配置微信小程序,张小龙现在开放了小程序的内嵌网页功能,这是一个非常大的惊喜啊,以后意味着你只要开放一个手机端网站,就可以制作一个小程序了哦.操作方法1.开发者登录微信小程序后台,选择 ...

  4. vuex本地存储

    vuex与localstorage 区别:vuex数据存储的内存,localstorage的数据存储在本地 应用场景:vuex用于组件之间的传值,localstorage用于不同页面之间的传值 永久性 ...

  5. 五、怎样修改oracle某个用户的密码

    1.键入命令:sqlplus / as sysdba 2.在sqlplus窗口执行命令: alter user you_username identified by you_password;

  6. 【225】ArcEngine 实现要素添加 & 删除

    参考:ArcGIS Engine效率探究——要素的添加和删除.属性的读取和更新 删除要素 //添加图层,显示在最上面 axMapControl1.AddShapeFile(@"D:\01-业 ...

  7. table对象

  8. HDU2604【矩阵快速幂】

    思路: 把fm看成01,f-1,m-0: 不能存在101,111; dp[i]代表第i结尾的方案数: ①:结尾是0一定行:只要i-1序列里添个0就好了,dp[i]+=dp[i-1]: ②:结尾是1   ...

  9. JAG Practice Contest for ACM-ICPC Asia Regional 2016 C题【贪心】

    camp给出的题解: 题解:贪心,先算出最小需要的长度.然后从左到右依次确定每一位.复杂度O(n)O(n) 长度为 2n2n 的串可以构造出需要 [0,1+3+...+2n-1][0,1+3+...+ ...

  10. hoj2188 WordStack

    WordStack My Tags   (Edit)   Source : Mid-Atlantic 2005   Time limit : 5 sec   Memory limit : 32 M S ...