题目链接:

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. HIVE—数据仓库

    1. hive是什么? Hive是基于 Hadoop 的一个数据仓库工具: 1.       hive本身不提供数据存储功能,使用HDFS做数据存储: 2.       hive也不分布式计算框架,h ...

  2. 电竞大数据平台 FunData 的系统架构演进

      电竞大数据时代,数据对比赛的观赏性和专业性都起到了至关重要的作用.同样的,这也对电竞数据的丰富性与实时性提出了越来越高的要求. 电竞数据的丰富性从受众角度来看,可分为赛事.战队和玩家数据:从游戏角 ...

  3. 树莓派ubuntu系统下修改config.txt文件 树莓派config.txt文件修改记录

    原文:https://www.raspberrypi.org/documentation/configuration/config-txt.md译文:http://my.oschina.net/fun ...

  4. 用Python批量下载DACC的MODIS数据

    本人初次尝试用Python批量下载DACC的MODIS数据,记下步骤,提醒自己,数据还在下载,成功是否未知,等待结果中...... 若有大佬发现步骤有不对之处,望指出,不胜感激. 1.下载Python ...

  5. Asp.Ner Core定时任务

    AspNet Core定时任务 纪念人类首张黑洞照片发布 第一种方式BackgroundService 基于后台服务类BackgroundService实现,类所在命名空间Microsoft.Exte ...

  6. 20155236 《信息安全概论》实验二(Windows系统口令破解)实验报告

    20155236 <信息安全概论>实验二(Windows系统口令破解)实验报告 北京电子科技学院(BESTI) 实验报告 课程:信息安全概论 班级:1552 姓名:范晨歌 学号:20155 ...

  7. 2016-2017-2 20155339 《Java面向对象程序设计》实验三敏捷开发与XP实践实验报告

    2016-2017-2 20155339 <Java面向对象程序设计>实验三敏捷开发与XP实践实验报告 实验内容 XP基础 XP核心实践 相关工具 实验内容 一.在IDEA中使用工具(Co ...

  8. 【转载】图说C++对象模型:对象内存布局详解

    原文: 图说C++对象模型:对象内存布局详解 正文 回到顶部 0.前言 文章较长,而且内容相对来说比较枯燥,希望对C++对象的内存布局.虚表指针.虚基类指针等有深入了解的朋友可以慢慢看.本文的结论都在 ...

  9. MySQLdb in Python: “Can't connect to MySQL server on 'localhost'”

    因为我使用的是win64,所以在此系统下,需要设置为 127.0.0.1 #coding=utf-8 import MySQLdb if __name__ == '__main__': # 打开数据库 ...

  10. Spark 序列化问题

    在Spark应用开发中,很容易出现如下报错: org.apache.spark.SparkException: Task not serializable at org.apache.spark.ut ...