【HDU 5875】Function

传送门

题目描述

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:

qwq

You job is to calculate F(l,r), for each query (l,r).

解题思路

我们转化一下题意,询问区间(l ,r)其实就是询问al % al+1 %al+2 %.....%ar 的值,那么,在不断取模的过程中,当前的结果一定是不断变小的,并且如果我们对一个数膜一个比它更大的数,显然这个数是不会变的,也就是说,比当前结果大的数其实对我们没有卵用,所以我们的任务就是在当前位置的后面找到第一个比当前数小的数。 那么,我们应该怎么做呢?

XJH大佬直接给出了做法——st表加二分。我们先维护一个区间最小的st表,然后不断二分,如果当前区间的最小值比当前结果小,那么r=m,否则 l=m+1。我们不断重复操作,那么我们最后就可以得到结果。

代码

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int st[100050][25],a[100050];
 7 int loog[100050];
 8 int INF=1000000000;
 9 int t,n,m;
10 inline void read(int &x){
11     x=0; register char ch=getchar();
12     while(ch<‘0‘||ch>‘9‘)ch=getchar();
13     while(ch>=‘0‘&&ch<=‘9‘)x=x*10+ch-‘0‘,ch=getchar();
14 }
15 inline int query(int x,int y){
16     int z=loog[y-x+1];
17     return min(st[x][z],st[y-(1<<z)+1][z]);
18 }
19 int main(){
20     loog[0]=-1;
21     for(register int i=1;i<=100000;i++)loog[i]=loog[i>>1]+1;
22     read(t);
23     for(register int cas=1;cas<=t;cas++){
24         for(register int i=0;i<=100000;i++){
25             for(register int j=0;j<=24;j++){
26                 st[i][j]=INF;
27             }
28         }
29         read(n);
30         int N=loog[n]+1;
31         for(register int i=1;i<=n;i++){
32             read(a[i]);
33             st[i][0]=a[i];
34         }
35         for(register int i=1;i<=N;i++){
36             for(register int j=1;j<=n-(1<<i)+1;j++){
37                 st[j][i]=min(st[j][i-1],st[j+(1<<(i-1))][i-1]);
38             }
39         }
40         read(m);
41         register int l,r;
42         for(register int i=1;i<=m;i++){
43             read(l),read(r);
44             int num=a[l];
45             l++;
46             while(l<=r&&query(l,r)<=num){
47                 int tr=r;
48                 while(l<tr){
49                     int m=(l+tr)>>1;
50                     if(query(l,m)<=num){
51                         tr=m;
52                     }
53                     else l=m+1;
54                 }
55                 num%=a[l];
56                 l++;
57             }
58             printf("%d\n",num);
59         }
60     }
61 }

原文地址:https://www.cnblogs.com/Fang-Hao/p/9090119.html

时间: 2024-08-30 07:08:20

【HDU 5875】Function的相关文章

【HDU 4940】Destroy Transportation system(数据水/无源无汇带上下界可行流)

Description Tom is a commander, his task is destroying his enemy’s transportation system. Let’s represent his enemy’s transportation system as a simple directed graph G with n nodes and m edges. Each node is a city and each directed edge is a directe

【HDU 1009】FatMouse&#39; Trade

题 Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the warehouse containing his favorite food, JavaBean. The warehouse has N rooms. The i-th room contains J[i] pounds of JavaBeans and requires F[i] pounds of c

【HDU 5647】DZY Loves Connecting(树DP)

pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 332    Accepted Submission(s): 112 Problem Description DZY has an unroote

【2014 Multi-University Training Contest 3 1002】/【HDU 4888】 Redraw Beautiful Drawings

不容易啊,终于可以补第二个题了!! 顺便说一句:模版写残了就不要怪出题人啊 ~ (这残废模版研究了好长时间才找出错) 题目大意: 有一个n*m的矩阵,每一个格子里都将有一个数.给你每一行数字之和和每一列数字之和.求每一个位置能填0~k之间的哪个数.如果有多种可能输出"Not Unique",如果没有解输出"Impossible",如果一组解则将其输出. 解题思路: 最大流: 不可能的条件:是行之和和列之和不想等或者建图后的最大流与他们不想等. 多组的条件是:在最大流

【HDU 1839】 Delay Constrained Maximum Capacity Path(二分+最短路)

[HDU 1839] Delay Constrained Maximum Capacity Path(二分+最短路) Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1515    Accepted Submission(s): 481 Problem

【HDU 5828】Rikka with Sequence(线段树)

[HDU 5828]Rikka with Sequence(线段树) Rikka with Sequence Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2311    Accepted Submission(s): 391 Problem Description As we know, Rikka is poor at math.

【HDU 4352】 XHXJ&#39;s LIS (数位DP+状态压缩+LIS)

XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2422    Accepted Submission(s): 990 Problem Description #define xhxj (Xin Hang senior sister(学姐)) If you do not know xhxj, then careful

【HDU 5811】Colosseo(拓扑+输入优化)

[HDU 5811]Colosseo(拓扑+输入优化) Colosseo Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 446    Accepted Submission(s): 98 Problem Description Mr. Chopsticks keeps N monsters, numbered from 1 to N.

【HDU 5145】 NPY and girls(组合+莫队)

pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 593    Accepted Submission(s): 179 Problem Description NPY's girlfriend blew him out!H