【Tyvj1038】忠诚 线段树

题目描述

老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。

输入

输入中第一行有两个数m,n表示有m(m< =100000)笔账,n表示有n个问题,n< =100000。 第二行为m个数,分别是账目的钱数 后面n行分别是n个问题,每行有2个数字说明开始结束的账目编号。

输出

输出文件中为每个问题的答案。具体查看样例。

样例输入

10 3 1 2 3 4 5 6 7 8 9 10 2 7 3 9 1 10

样例输出

2 3 1

代码

 1 #include <cstdio>
 2 #include <cmath>
 3 #include <cstring>
 4 #include <ctime>
 5 #include <iostream>
 6 #include <algorithm>
 7 #include <set>
 8 #include <vector>
 9 #include <queue>
10 #include <map>
11 #include <stack>
12 #define inf 1000000007
13 #define mod 1000000007
14 using namespace std;
15 typedef __int64 ll;
16 inline ll read()
17 {
18     ll x=0,f=1;
19     char ch=getchar();
20     while(ch<'0'||ch>'9')
21     {
22         if(ch=='-')f=-1;
23         ch=getchar();
24     }
25     while(ch>='0'&&ch<='9')
26     {
27         x=x*10+ch-'0';
28         ch=getchar();
29     }
30     return x*f;
31 }
32 //*******************************************************************
33 int n,q;
34 int a[100100];
35 struct ss
36 {
37     int l,r,mn;
38 }tr[400001];
39 void build(int k,int s,int t)
40 {
41     tr[k].l=s;
42     tr[k].r=t;
43     if(s==t){tr[k].mn=a[s];return;}
44     int mid=(s+t)>>1;
45     build(k<<1,s,mid);
46     build(k<<1|1,mid+1,t);
47     tr[k].mn=min(tr[k<<1].mn,tr[k<<1|1].mn);
48 }
49 int ask(int k,int s,int t)
50 {
51     int L=tr[k].l;
52     int R=tr[k].r;
53     if(s==L&&R==t) return tr[k].mn;
54     int mid=(L+R)>>1;
55     if(t<=mid)return ask(k<<1,s,t);
56     if(s>mid) return ask(k<<1|1,s,t);
57     return  min(ask(k<<1,s,mid),ask(k<<1|1,mid+1,t));
58 }
59 int main()
60 {
61     scanf("%d%d",&n,&q);
62     for(int i=1;i<=n;i++)
63     {
64         scanf("%d",&a[i]);
65     }
66     build(1,1,n);
67     for(int i=1;i<=q;i++)
68     {
69         int x,y;
70         scanf("%d%d",&x,&y);
71         printf("%d ",ask(1,x,y));
72 
73     }
74     return 0;
75 }
View Code
原文地址:https://www.cnblogs.com/zxhl/p/4672070.html