记录编号 |
269092 |
评测结果 |
TTTTTTTTTT |
题目名称 |
区间权最大 |
最终得分 |
0 |
用户昵称 |
安呐一条小咸鱼。 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
10.036 s |
提交时间 |
2016-06-13 08:13:41 |
内存使用 |
27.04 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=1001000;
int A[maxn],B[maxn],C[maxn];
inline int QuickRead()
{
int ret ;
char ch = getchar();
while (ch < '0' || ch > '9') ch = getchar();
ret = ch - '0';
ch = getchar();
while (ch >= '0' && ch <= '9')
{
ret = ret * 10 + ch - '0';
ch = getchar();
}
return ret;
}
int a[maxn<<2];
void Build(int,int,int);
int Question(int,int,int,int,int);
int Get_max(int,int);
void Init();
int x,y;
int main()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
Init();
return 0;
}
void Init()
{
int m,n;
n=QuickRead();
m=QuickRead();
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&A[i],&B[i],&C[i]);
}
Build(1,1,n);
for(int i=1;i<=m;i++)
{
x=QuickRead();
y=QuickRead();
int c=Question(1,x,y,1,n);
printf("%d ",c);
}
}
void Build(int rt,int x,int y)
{
if(x==y)
{
scanf("%d",&a[rt]);
return;
}
int mid=(x+y)>>1;
Build(rt<<1,x,mid);
Build(rt<<1|1,mid+1,y);
a[rt]=Get_max(a[rt<<1],a[rt<<1|1]);
}
int Question(int rt,int x,int y,int s,int t)
{
if(x==s&&y==t)
{
return a[rt];
}
int mid=(s+t)/2;
if(y<=mid) return Question(rt*2,x,y,s,mid);
if(x>mid) return Question(rt*2+1,x,y,mid+1,t);
return Get_max(Question(rt*2,x,mid,s,mid),Question(rt*2+1,mid+1,y,mid+1,t));
}
int Get_max(int x,int y)
{
return x>y?x:y;
}