比赛 |
20120418s |
评测结果 |
C |
题目名称 |
山海经 |
最终得分 |
0 |
用户昵称 |
TBK |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2012-04-18 11:29:43 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <iomanip>
#include <vector>
#include <set>
#include <algorithm>
#define MAXN 0x7fffffff
using namespace std;
int a[100001],b,c,d,x,y,s,s1,s2,s3,s4,s5;
struct fun
{
int l;
int r;
int m;
int n;
int k;
int i;
int j;
int e;
int g,g1,g2;
int h,h1,h2;
}f[300000];
bool bo;
void build(int p,int q)
{
int t;
t=d;
f[d].l=p;
f[d].r=q;
if (p==q)
{
f[d].e=a[p];
f[d].k=a[p];
f[d].g=a[p];
f[d].g1=p;
f[d].g2=p;
f[d].h=a[p];
f[d].h1=p;
f[d].h2=p;
f[d].i=p;
f[d].j=q;
return;
}
d++;
f[t].m=d;
build(p,(p+q)/2);
d++;
f[t].n=d;
build((p+q)/2+1,q);
f[t].e=f[f[t].m].e+f[f[t].n].e;
if (f[f[t].m].k>=f[f[t].n].k)
{
f[t].k=f[f[t].m].k;
f[t].i=f[f[t].m].i;
f[t].j=f[f[t].m].j;
}
else
{
f[t].k=f[f[t].n].k;
f[t].i=f[f[t].n].i;
f[t].j=f[f[t].n].j;
}
if (f[f[t].m].g>f[f[t].m].e+f[f[t].n].g)
{
f[t].g=f[f[t].m].g;
f[t].g1=f[f[t].m].g1;
f[t].g2=f[f[t].m].g2;
}
else
{
f[t].g=f[f[t].m].e+f[f[t].n].g;
f[t].g1=f[t].l;
f[t].g2=f[f[t].n].g2;
}
if (f[f[t].n].h>f[f[t].n].e+f[f[t].m].h)
{
f[t].h=f[f[t].n].h;
f[t].h1=f[f[t].n].h1;
f[t].h2=f[f[t].n].h2;
}
else
{
f[t].h=f[f[t].n].e+f[f[t].m].h;
f[t].h1=f[f[t].m].h1;
f[t].h2=f[t].r;
}
if (f[f[t].m].h+f[f[t].n].g>f[t].k)
{
f[t].k=f[f[t].m].h+f[f[t].n].g;
f[t].i=f[f[t].m].h1;
f[t].j=f[f[t].n].g2;
}
else if ((f[f[t].m].h+f[f[t].n].g==f[t].k)&&(f[t].i>f[f[t].m].h1))
{
f[t].i=f[f[t].m].h1;
f[t].j=f[f[t].n].g2;
}
}
void find(int u)
{
if ((f[u].l==x)&&(f[u].r==y))
{
printf("%d %d %d\n",f[u].k,f[u].i,f[u].j);
return;
}
else if ((x<=f[f[u].m].r)&&(y>=f[f[u].n].l))
{
find1(f[u].m);
if (s<0)
{
s=0;
bo=true;
s1=f[f[u].n].l;
}
find2(f[u].n);
printf("%d %d %d\n",s,s1,s2);
}
else
{
if (y>=f[f[u].n].l) find(f[u].n);
else find(f[u].m);
}
}
int main(void)
{
freopen("hill.in","r",stdin);
freopen("hill.out","w",stdout);
scanf("%d%d",&b,&c);
for (d=1;d<=b;d++) scanf("%d",&a[d]);
d=0;
build(1,b);
for (d=0;d<c;d++)
{
scanf("%d%d",&x,&y);
s=0;
bo=false;
find(0);
}
fclose(stdin);
fclose(stdout);
return 0;
}