Hackerrank Week of Code 30 Range Modular Queries
来源:互联网 发布:google play推荐算法 编辑:程序博客网 时间:2024/05/16 06:43
题目大意
给定一个长度为
Data Constraint
题解
当询问的
当
时间复杂度:
SRC
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<cmath>using namespace std ;#define N 40000 + 10#define M 200 + 10struct Query { int l , r , x , y ; int h ;} Q[N] ;int Num[M][M][M] , T[N] ;int a[N] , Belong[N] , Ans[N] ;int n , m , Cnt , Block , Maxv ;bool cmp( Query a , Query b ) { return Belong[a.l] < Belong[b.l] || ( Belong[a.l] == Belong[b.l] && a.r < b.r ) ; }void Modify( int l , int r , int del ) { for (int i = l ; i <= r ; i ++ ) T[a[i]] += del ;}int main() { scanf( "%d%d" , &n , &m ) ; Block = 200 ; for (int i = 1 ; i <= n ; i ++ ) { scanf( "%d" , &a[i] ) ; Maxv = max( Maxv , a[i] ) ; Belong[i] = i / Block + ( i % Block != 0 ) ; } for (int i = 1 ; i <= Block ; i ++ ) { int now = 1 ; for (int j = 1 ; j <= n ; j ++ ) { if ( Belong[j] != now ) { now ++ ; for (int k = 0 ; k < i ; k ++ ) Num[i][now][k] = Num[i][now-1][k] ; } Num[i][now][a[j]%i] ++ ; } } for (int i = 1 ; i <= m ; i ++ ) { int l , r , x , y ; scanf( "%d%d%d%d" , &l , &r , &x , &y ) ; l ++ , r ++ ; if ( x <= Block ) { int fl = Belong[l] ; int fr = Belong[r] ; if ( fl < fr ) Ans[i] = Num[x][fr-1][y] - Num[x][fl][y] ; if ( fl != fr ) { for (int j = l ; j <= min( fl * Block , n ) ; j ++ ) if ( a[j] % x == y ) Ans[i] ++ ; for (int j = (fr - 1) * Block + 1 ; j <= r ; j ++ ) if ( a[j] % x == y ) Ans[i] ++ ; } else { for (int j = l ; j <= r ; j ++ ) if ( a[j] % x == y ) Ans[i] ++ ; } } else { ++ Cnt ; Q[Cnt].l = l , Q[Cnt].r = r , Q[Cnt].x = x , Q[Cnt].y = y ; Q[Cnt].h = i ; } } sort( Q + 1 , Q + Cnt + 1 , cmp ) ; int lasl = 1 , lasr = 0 ; for (int i = 1 ; i <= Cnt ; i ++ ) { if ( lasl < Q[i].l ) Modify( lasl , Q[i].l - 1 , -1 ) ; if ( lasr > Q[i].r ) Modify( Q[i].r + 1 , lasr , -1 ) ; if ( lasl > Q[i].l ) Modify( Q[i].l , lasl - 1 , 1 ) ; if ( lasr < Q[i].r ) Modify( lasr + 1 , Q[i].r , 1 ) ; for (int k = Q[i].y ; k <= Maxv ; k += Q[i].x ) Ans[Q[i].h] += T[k] ; lasl = Q[i].l , lasr = Q[i].r ; } for (int i = 1 ; i <= m ; i ++ ) printf( "%d\n" , Ans[i] ) ; return 0 ;}
以上.
1 0
- [Hackerrank Week of Code 30]Range Modular Queries
- Hackerrank Week of Code 30 Range Modular Queries
- [hackerrank]Range Modular Queries
- [后缀自动机][分块]HackerRank Week of Code 30 .Substring Queries
- [HackerRank Week of Code]DAG Queries/[JZOJ5038]命运的构造
- 【后缀自动机+阈值优化】HackerRank(Week of Code 30)[Substring Queries]题解
- hackerrank Week of Code Target
- [HackerRank]Week Of Code 23
- Hackerrank Week of Code 32
- [Hackerrank Week of Code 30]A Graph Problem
- HackerRank Week of Code -18 GG
- HackerRank——Week of Code 26
- Hackerrank——Week of Code 27
- Hackerrank——Week of Code 29
- Hackerrank Week of Code 25 Stone Division(SG 博弈)
- HackerRank Week of Code 23——Enclosure(等周定理+余弦定理)
- Week of Code:GG
- Week Of Code 27
- 深度学习框架Keras简介
- Socket通讯
- CSS布局:图片在DIV中上下左右居中(水平和垂直都居中)
- 康托逆运算
- [NLP]训练Word2vec的JAVA版本
- Hackerrank Week of Code 30 Range Modular Queries
- mysql 的索引优化
- javascript中的with关键字
- Elasticsearch之client源码简要分析
- 关于安卓(Android)图片上传大图的两点建议。
- git初次使用
- Linux中的权限简介
- 系统安装卸载软件时出现2502与2503错误解决
- 适配器模式(Adapter):类适配器、对象适配器