比赛 |
20120712 |
评测结果 |
AAAAAAAAAA |
题目名称 |
区间权最大 |
最终得分 |
100 |
用户昵称 |
Czb。 |
运行时间 |
2.020 s |
代码语言 |
C++ |
内存使用 |
1.83 MiB |
提交时间 |
2012-07-12 11:20:38 |
显示代码纯文本
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<set>
using namespace std;
struct orz
{
int x,y,z;
}a[100001];
struct aaa
{
int x,y,num;
bool flag;
bool operator<(const aaa & other) const
{
if(y<other.y)
return true;
return false;
}
};
int n,m,ans[100001];
multiset <aaa> s;
multiset <aaa> ::iterator p,it;
int cmp(const void *a,const void *b)
{
return (*(orz *)b).z-(*(orz *)a).z;
}
int main()
{
freopen("max.in","r",stdin);
freopen("max.out","w",stdout);
int i,x,y;aaa tmp;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d%d%d",&a[i].x,&a[i].y,&a[i].z);
qsort(a+1,n,sizeof(orz),cmp);
for(i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
tmp.num=i;tmp.x=x;tmp.y=y;
s.insert(tmp);
}
tmp.x=0x7FFFFFFF;tmp.y=-1;
s.insert(tmp);
tmp.x=0x7FFFFFFF;tmp.y=tmp.x;
s.insert(tmp);
for(i=1;i<=n;i++)
{
tmp.y=a[i].y;
for(it=s.lower_bound(tmp);it!=s.end();it++)
{
if((*it).x<=a[i].x)
{
ans[(*it).num]=a[i].z;
p=it;it--;
s.erase(p);
}
}
}
for(i=1;i<=m;i++)
printf("%d\n",ans[i]);
return 0;
}