记录编号 |
474379 |
评测结果 |
AAATTTTTTT |
题目名称 |
YGO——组卡组 |
最终得分 |
30 |
用户昵称 |
+1s |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
7.783 s |
提交时间 |
2017-11-09 21:44:45 |
内存使用 |
68.95 MiB |
显示代码纯文本
#include<cstdio>
#include<cmath>
#define MAX(a,b) a>b?a:b
int t,q,att[1000010],hea[1000010];
struct{int l,r,atk,hel;}stree[4000040];
void bui(int l,int r,int idx)
{
stree[idx].l=l;
stree[idx].r=r;
if(l==r)
{
stree[idx].atk=att[l];
stree[idx].hel=hea[l];
return;
}
int m=(l+r)/2;
bui(l,m,idx*2);
bui(m+1,r,idx*2+1);
stree[idx].atk=MAX(stree[idx*2].atk,stree[idx*2+1].atk);
stree[idx].hel=MAX(stree[idx*2].hel,stree[idx*2+1].hel);
}
int qryatk(int l,int r,int idx)
{
if(stree[idx].l==l&&stree[idx].r==r)return stree[idx].atk;
if(r<=stree[idx*2].r)return qryatk(l,r,idx*2);
else if(l>=stree[idx*2+1].l)return qryatk(l,r,idx*2+1);
else return MAX(qryatk(l,stree[idx*2].r,idx*2),qryatk(stree[idx*2+1].l,r,idx*2+1));
}
int qryhel(int l,int r,int idx)
{
if(stree[idx].l==l&&stree[idx].r==r)return stree[idx].hel;
if(r<=stree[idx*2].r)return qryhel(l,r,idx*2);
else if(l>=stree[idx*2+1].l)return qryhel(l,r,idx*2+1);
else return MAX(qryhel(l,stree[idx*2].r,idx*2),qryhel(stree[idx*2+1].l,r,idx*2+1));
}
int main()
{
freopen("ygocrad.in","r",stdin);
freopen("ygocrad.out","w",stdout);
scanf("%d %d",&t,&q);
for(int i=1;i<=t;i++)
{
int aaaa;
scanf("%d %d %d",&aaaa,&att[i],&hea[i]);
}
bui(1,t,1);
for(int i=1;i<=q;i++)
{
int c,l,r;
scanf("%d %d %d",&c,&l,&r);
if(c==0)printf("%d\n",qryhel(l,r,1));
else printf("%d\n",qryatk(l,r,1));
}
return 0;
}