记录编号 |
458963 |
评测结果 |
AAAAAAAATA |
题目名称 |
YGO——组卡组 |
最终得分 |
90 |
用户昵称 |
Fisher. |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
8.909 s |
提交时间 |
2017-10-12 07:22:27 |
内存使用 |
41.30 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#define ll long long
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
return x*f;
}
const int maxn=1000010;
int n,m;
int max1[maxn<<2],max2[maxn<<2];
int data1[maxn],data2[maxn];
inline void build(int o,int l,int r){
if(l==r){
max1[o]=data1[l];
max2[o]=data2[l];
return ;
}
int m=(l+r)>>1,ls=o<<1,rs=ls|1;
build(ls,l,m);
build(rs,m+1,r);
max1[o]=max(max1[ls],max1[rs]);
max2[o]=max(max2[ls],max2[rs]);
}
inline int find1(int o,int l,int r,int nl,int nr){
if(l>=nl&&r<=nr)return max1[o];
int m=(l+r)>>1,ls=o<<1,rs=ls|1;
int ans=-0x7fffffff;
if(m>=nl)ans=max(ans,find1(ls,l,m,nl,nr));
if(m<nr)ans=max(ans,find1(rs,m+1,r,nl,nr));
return ans;
}
inline int find2(int o,int l,int r,int nl,int nr){
if(l>=nl&&r<=nr)return max2[o];
int m=(l+r)>>1,ls=o<<1,rs=ls|1;
int ans=-0x7fffffff;
if(m>=nl)ans=max(ans,find2(ls,l,m,nl,nr));
if(m<nr)ans=max(ans,find2(rs,m+1,r,nl,nr));
return ans;
}
int main(){
freopen("ygocrad.in","r",stdin);
freopen("ygocrad.out","w",stdout);
n=read();m=read();
for(int i=1;i<=n;i++){
int c=read(),a=read(),b=read();
data1[i]=a;
data2[i]=b;
}
build(1,1,n);
for(int i=1;i<=m;i++){
int f=read(),l=read(),r=read();
if(f==1){
printf("%d\n",find1(1,1,n,l,r));
}
if(f==0){
printf("%d\n",find2(1,1,n,l,r));
}
}
return 0;
}