题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5875

Function

Time Limit: 7000/3500 MS (Java/Others)
Memory Limit: 262144/262144 K (Java/Others)
#### 问题描述
> The shorter, the simpler. With this problem, you should be convinced of this truth.
>
> You are given an array A of N postive integers, and M queries in the form (l,r). A function F(l,r) (1≤l≤r≤N) is defined as:
> F(l,r)={AlF(l,r−1) modArl=r;l You job is to calculate F(l,r), for each query (l,r).
>
#### 输入
> There are multiple test cases.
>
> The first line of input contains a integer T, indicating number of test cases, and T test cases follow.
>
> For each test case, the first line contains an integer N(1≤N≤100000).
> The second line contains N space-separated positive integers: A1,…,AN (0≤Ai≤109).
> The third line contains an integer M denoting the number of queries.
> The following M lines each contain two integers l,r (1≤l≤r≤N), representing a query.
>
#### 输出
> For each query(l,r), output F(l,r) on one line.
>
####样例输入
> 1
> 3
> 2 3 3
> 1
> 1 3

样例输出

2

题意

给你n个数,m个查询,对于每个查询(l,r),输出a[l]%a[l+1]%a[l+2]%...%a[r]。

题解

离线做,用优先队列维护下,吧所有的查询放在一起做,对于当前数a[i],只计算那些>a[i]的数%a[i],然后再放进优先队列,由于x%a[i]>x/2,所以每个数最多做logA[i]次,所以总共做了n*log(A[i])次,每次O(logn)的优先队列操作。

代码

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<ctime>
#include<vector>
#include<cstdio>
#include<string>
#include<bitset>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define sz() size()
#define pb(v) push_back(v)
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++)
#define scf scanf
#define prf printf typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8;
const double PI = acos(-1.0); //start---------------------------------------------------------------------- const int maxn=1e5+10; int arr[maxn],ans[maxn]; struct Query{
int l,r,id;
Query(int l,int r,int id):l(l),r(r),id(id){}
bool operator < (const Query& tmp) const {
return l<tmp.l;
}
}; struct Node{
int id,v;
Node(int id,int v):id(id),v(v){}
bool operator < (const Node& tmp)const {
return v<tmp.v;
}
}; void init(){
clr(ans,-1);
} int n,m; int main() {
int tc,kase=0;
scanf("%d",&tc);
while(tc--){
scf("%d",&n);
init();
for(int i=1;i<=n;i++) scf("%d",&arr[i]);
scf("%d",&m);
vector<Query> que;
rep(i,0,m){
int l,r;
scf("%d%d",&l,&r);
que.pb(Query(l,r,i));
} sort(all(que));
priority_queue<Node> pq; int p=0;
for(int i=1;i<=n;i++){
while(!pq.empty()&&pq.top().v>=arr[i]){
Node nd=pq.top(); pq.pop();
if(que[nd.id].r<i) continue;
pq.push(Node(nd.id,nd.v%arr[i]));
ans[que[nd.id].id]=nd.v%arr[i];
}
while(p<que.sz()&&que[p].l==i){
pq.push(Node(p,arr[i]));
ans[que[p].id]=arr[i];
p++;
}
} rep(i,0,m){
prf("%d\n",ans[i]);
} }
return 0;
} //end----------------------------------------------------------------------- /*
3
3
2 3 3
1
2 2
*/

HDU 5875 Function 优先队列+离线的更多相关文章

  1. HDU 5875 Function(RMQ-ST+二分)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  2. HDU 5875 Function 【倍增】 (2016 ACM/ICPC Asia Regional Dalian Online)

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  3. HDU 5875 Function(ST表+二分)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5875 [题目大意] 给出一个数列,同时给出多个询问,每个询问给出一个区间,要求算出区间从左边开始不 ...

  4. HDU 5875 Function st + 二分

    Function Problem Description   The shorter, the simpler. With this problem, you should be convinced ...

  5. HDU 5875 Function

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  6. HDU 5875 Function 大连网络赛 线段树

    Function Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total ...

  7. HDU - 5875 Function(预处理)

    Function The shorter, the simpler. With this problem, you should be convinced of this truth.      Yo ...

  8. HDU 5875 Function -2016 ICPC 大连赛区网络赛

    题目链接 网络赛的水实在太深,这场居然没出线zzz,差了一点点,看到这道题的的时候就剩半个小时了.上面是官方的题意题解,打完了才知道暴力就可以过,暴力我们当时是想出来了的,如果稍稍再优化一下估计就过了 ...

  9. HDU 5875 Function (2016年大连网络赛 H 线段树+gcd)

    很简单的一个题的,结果后台数据有误,自己又太傻卡了3个小时... 题意:给你一串数a再给你一些区间(lef,rig),求出a[lef]%a[lef+1]...%a[rig] 题解:我们可以发现数字a对 ...

随机推荐

  1. Mac配置PHP+Nginx+MySQL开发环境

    Homebrew简称brew,OSX上的软件包管理工具,在Mac终端可以通过brew安装.更新.卸载各种软件,(简直就是神器级武器). 废话不多说,没安装brew自己去百度学习安装,这里就不多说了. ...

  2. string 模块

    string 说明:string 模块保留了很多有用的常量和类,用来处理 string 和 unicode 对象. 作用:包含处理文本的常量和类. capwords( ) capwords( ) 的作 ...

  3. mysql-5.7.24 在centos7安装

    搭建环境:mysql5.7.24  CentOS-7-x86_64-DVD-1804.iso  桌面版 1. 进入官网:https://dev.mysql.com/downloads/mysql/ 该 ...

  4. 【Keil】Keil5-改变字的大小和颜色

    点击 Edit / Configuration 出现弹窗,选择Colors & Fonts 底下可以选择要改哪个部分,例如普通代码.数字.关键字.注释...等等,当然也可以改变背景颜色的,英文 ...

  5. C语言编程练习 GPS数据处理

    题目内容: NMEA-0183协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine ...

  6. 基于R实现k-means法与k-medoids法

    k-means法与k-medoids法都是基于距离判别的聚类算法.本文将使用iris数据集,在R语言中实现k-means算法与k-medoids算法. k-means聚类 首先删去iris中的Spec ...

  7. C# typeof() 和 GetType()区是什么

    1.typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称. 2.GetType()方法继承自Object,所以C#中任何对象都具有GetType()方法,它的作用和typeof() ...

  8. 【课堂实践】Myod

    实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ...

  9. 20155318 《Java程序设计》实验一(Java开发环境的熟悉)实验报告

    20155318 <Java程序设计>实验一(Java开发环境的熟悉)实验报告 一.实验内容及步骤 (一)命令行下Java程序开发 步骤一(新建文件夹): 打开windows下的cmd → ...

  10. 4709: [Jsoi2011]柠檬

    4709: [Jsoi2011]柠檬 https://www.lydsy.com/JudgeOnline/problem.php?id=4709 分析: 决策单调性+栈+二分. 首先挖掘性质:每个段选 ...