zoukankan      html  css  js  c++  java
  • HDU5875

    Function

    Time Limit: 7000/3500 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
    Total Submission(s): 399    Accepted Submission(s): 151


    Problem Description

    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) (1lrN) is defined as:
    F(l,r)={AlF(l,r1) modArl=r;l<r.
    You job is to calculate F(l,r), for each query (l,r).
     

    Input

    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(1N100000).
      The second line contains N space-separated positive integers: A1,,AN (0Ai109).
      The third line contains an integer M denoting the number of queries. 
      The following M lines each contain two integers l,r (1lrN), representing a query.
     

    Output

    For each query(l,r), output F(l,r) on one line.
     

    Sample Input

    1
    3
    2 3 3
    1
    1 3
     

    Sample Output

    2
     

    Source

     
     1 //2016.9.11
     2 #include <iostream>
     3 #include <cstdio>
     4 #include <cstring>
     5 #define N 100005
     6 
     7 using namespace std;
     8 
     9 int a[N], nex[N];//nex数组,表示跳到下一个要取余的位置,比a[i]大的数不用取余,此处优化降低时间
    10 
    11 int main()
    12 {
    13     int T, n, q, ans;
    14     scanf("%d", &T);
    15     while(T--)
    16     {
    17         scanf("%d", &n);
    18         for(int i = 1; i <= n; i++)
    19         {
    20             scanf("%d", &a[i]);
    21         }
    22         scanf("%d", &q);
    23         int l, r;
    24         for(int i = 1; i <= n; i++)
    25         {
    26             nex[i] = -1;
    27             for(int j = i+1; j <= n; j++)
    28                 if(a[i]>=a[j])
    29                 {
    30                     nex[i] = j;
    31                     break;
    32                 }
    33         }
    34         while(q--)
    35         {
    36             scanf("%d%d", &l, &r);
    37             ans = a[l];
    38             for(int i = nex[l]; i <= r; i = nex[i])
    39             {
    40                 if(i == -1)break;
    41                 ans %= a[i];
    42             }
    43             printf("%d
    ", ans);
    44         }
    45     }
    46 
    47     return 0;
    48 }
  • 相关阅读:
    实验10:Problem D: STL——管道二
    实验10:Problem C: STL——呵呵型自动机
    实验10:Problem B: STL——哈哈型自动机
    实验10:Problem A: STL——整理唱片
    实验9:Problem I: 学生干部虚基类
    hihocoder1994 树与落叶 DFS+前缀和+二分
    [Offer收割]编程练习赛108
    【模板】左偏树(可并堆)
    P2993 [FJOI2014]最短路径树问题 点分治+最短路
    E
  • 原文地址:https://www.cnblogs.com/Penn000/p/5861361.html
Copyright © 2011-2022 走看看