码迷,mamicode.com
首页 > 其他好文 > 详细

codevs 3304

时间:2015-11-05 22:14:43      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

练下线段树。。。明天加油(准确的说是后天吧。。。)

技术分享
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<queue>
 5 #include<iostream>
 6 #define inc(i,l,r) for(i=l;i<=r;i++)
 7 #define dec(i,l,r) for(i=l;i>=r;i--)
 8 #define inf 1e9
 9 #define mem(a) memset(a,0,sizeof(a))
10 #define ll long long
11 #define succ(x) (1<<x)
12 #define NM 600000+5
13 using namespace std;
14 int read(){
15     int x=0,f=1;char ch=getchar();
16     while(!isdigit(ch)){if(ch==-)f=-1;ch=getchar();}
17     while(isdigit(ch))x=x*10+ch-0,ch=getchar();
18     return x*f;
19 }
20 struct info{
21     int max,min,l,r;
22     info(int x=0):max(x),min(x),r(0),l(0){}
23 }T[NM],null;
24 int n,m,_x,_y;
25 info operator+(const info&x,const info&y){
26     info f;
27     f.min=min(x.min,y.min);
28     f.max=max(x.max,y.max);
29     f.l=max(x.l,y.l);f.r=max(x.r,y.r);
30     f.l=max(f.l,y.max-x.min);f.r=max(f.r,x.max-y.min);
31     return f;
32 }
33 void build(int i,int x,int y){
34     int t=x+y>>1;
35     if(x==y){
36         T[i]=info(read());
37         return;
38     }
39     build(i<<1,x,t);build(i<<1|1,t+1,y);
40     T[i]=T[i<<1]+T[i<<1|1];
41 }
42 info ask(int i,int x,int y){
43     int t=x+y>>1;
44     if(_x>y||_y<x)return null;
45     if(_x<=x&&y<=_y)return T[i];
46     return ask(i<<1,x,t)+ask(i<<1|1,t+1,y);
47 }
48 int main(){
49     n=read();
50     build(1,1,n);
51     null.l=null.r=null.max=-inf;null.min=inf;
52     m=read();
53     while(m--){
54         _x=read();_y=read();
55         if(_x<=_y)printf("%d\n",ask(1,1,n).l);
56         else{
57             swap(_x,_y);
58             printf("%d\n",ask(1,1,n).r);
59         }
60     }
61     return 0;
62 }
View Code

 

codevs 3304

标签:

原文地址:http://www.cnblogs.com/onlyRP/p/4940824.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!