记录编号 |
226013 |
评测结果 |
AAAAAAAAAA |
题目名称 |
区间权最大 |
最终得分 |
100 |
用户昵称 |
KZNS |
是否通过 |
通过 |
代码语言 |
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