1. 程式人生 > >洛谷——P1816 忠誠

洛谷——P1816 忠誠

2個 分別是 using hellip pri 編號 struct 多少 logs

https://www.luogu.org/problem/show?pid=1816#sub

題目描述

老管家是一個聰明能幹的人。他為財主工作了整整10年,財主為了讓自已賬目更加清楚。要求管家每天記k次賬,由於管家聰明能幹,因而管家總是讓財主十分滿意。但是由於一些人的挑撥,財主還是對管家產生了懷疑。於是他決定用一種特別的方法來判斷管家的忠誠,他把每次的賬目按1,2,3…編號,然後不定時的問管家問題,問題是這樣的:在a到b號賬中最少的一筆是多少?為了讓管家沒時間作假他總是一次問多個問題。

輸入輸出格式

輸入格式:

輸入中第一行有兩個數m,n表示有m(m<=100000)筆賬,n表示有n個問題,n<=100000。

第二行為m個數,分別是賬目的錢數

後面n行分別是n個問題,每行有2個數字說明開始結束的賬目編號。

輸出格式:

輸出文件中為每個問題的答案。具體查看樣例。

輸入輸出樣例

輸入樣例#1:
10 3
1 2 3 4 5 6 7 8 9 10
2 7
3 9
1 10
輸出樣例#1:
2 3 1


wocwocwocwocwoc 輸出格式WA半天 shit!
 1 #include <cstdio>
 2 
 3 using namespace std;
 4 
 5 const int N(100000+5);
 6 int n,m;
7 8 #define lc (now<<1) 9 #define rc (now<<1|1) 10 #define min(a,b) (a<b?a:b) 11 #define mid (tree[now].l+tree[now].r>>1) 12 struct Tree 13 { 14 int l,r,minn; 15 }tree[N<<2]; 16 inline void Tree_up(int now) 17 { 18 tree[now].minn=min(tree[lc].minn,tree[rc].minn);
19 } 20 void Tree_build(int now,int l,int r) 21 { 22 tree[now].l=l; tree[now].r=r; 23 if(l==r) 24 { 25 scanf("%d",&tree[now].minn); 26 return ; 27 } 28 Tree_build(lc,l,mid); 29 Tree_build(rc,mid+1,r); 30 Tree_up(now); 31 } 32 int Q_min(int now,int l,int r) 33 { 34 if(tree[now].l==l&&tree[now].r==r) return tree[now].minn; 35 if(r<=mid) return Q_min(lc,l,r); 36 else if(l>mid) return Q_min(rc,l,r); 37 else return min(Q_min(lc,l,mid),Q_min(rc,mid+1,r)); 38 } 39 40 int main() 41 { 42 scanf("%d%d",&n,&m); 43 Tree_build(1,1,n); 44 for(int u,v;m--;) 45 { 46 scanf("%d%d",&u,&v); 47 printf("%d ",Q_min(1,u,v)); 48 } 49 return 0; 50 }

洛谷——P1816 忠誠