记录编号 458963 评测结果 AAAAAAAATA
题目名称 YGO——组卡组 最终得分 90
用户昵称 GravatarFisher. 是否通过 未通过
代码语言 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;
}