记录编号 226013 评测结果 AAAAAAAAAA
题目名称 区间权最大 最终得分 100
用户昵称 GravatarKZNS 是否通过 通过
代码语言 C++ 运行时间 2.056 s
提交时间 2016-02-17 18:57:40 内存使用 9.62 MiB
显示代码纯文本
//KZNS
#include <fstream>
#include <algorithm>
using namespace std;
//
ifstream fin ("max.in");
ofstream fout ("max.out");
//
class poi {
public:
	int l, r, mx;
};
class xd {
public:
	int l, r, tp, mm;
};
bool operator < (xd a, xd b) {
	if (a.r==b.r)
		return a.tp<b.tp;
	return a.r<b.r;
}
//
poi tr[1<<19];
xd ls[200003];
int n, m;
//
void mt(int x, int l, int r) {
	poi &u=tr[x];
	u.l=l;
	u.r=r;
	u.mx=0;
	if (l!=r) {
		mt(x<<1, l, l+r>>1);
		mt(x<<1^1, (l+r>>1)+1, r);
	}
}
void ist(int x, int l, int k) {
	poi &u=tr[x];
	u.mx=max(u.mx, k);
	if (u.l==u.r)
		return;
	if (l<=(u.l+u.r>>1))
		ist(x<<1, l, k);
	else
		ist(x<<1^1, l, k);
}
int ck(int x, int l, int r) {
	poi &u=tr[x];
	if (l<=u.l&&u.r<=r)
		return u.mx;
	int ud=0;
	if (l<tr[x<<1^1].l)
		ud=max(ud, ck(x<<1, l, r));
	if (r>tr[x<<1].r)
		ud=max(ud, ck(x<<1^1, l, r));
	return ud;
}
//
int main() {
	mt(1, 1, 200000);
	fin >>n >>m;
	int hh=n+m;
	for (int i=0; i<n; i++) {
		fin >>ls[i].l >>ls[i].r >>ls[i].mm;
		ls[i].tp=0;
	}
	for (int i=n; i<hh; i++) {
		fin >>ls[i].l >>ls[i].r;
		ls[i].mm=i-n;
		ls[i].tp=1;
	}
	sort(ls, ls+hh);
	int ed[100002]={0};
	for (int i=0; i<hh; i++) {
		if (ls[i].tp==1) {
			ed[ls[i].mm]=ck(1, ls[i].l, ls[i].r);
		}
		else {
			ist(1, ls[i].l, ls[i].mm);
		}
	}
	for (int i=0; i<m; i++)
		fout <<ed[i] <<endl;
	return 0;
}

//UBWH