您的位置:首页 > 其它

JZOJ.5329【NOIP2017模拟8.22】时间机器

2017-08-22 19:19 246 查看

Description

#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
#include <algorithm>
#define N 100005
using namespace std;
struct data{
int l,r,num,v;
bool operator < (const data &a) const{
return (a.r>r);
}
}zu
;
multiset<data> qwq;
multiset<data>::iterator qaq;
int n,m,t,ans;
bool power;
int read(){
int x=0,w=1;
char c=0;
for (c=getchar();c<'0'||c>'9';c=getchar()) {if (c=='-') w=-1;}
for (;c>='0'&&c<='9';c=getchar()) x=(x<<3)+(x<<1)+c-'0';
return x*w;
}
bool comp(const struct data a,const struct data b){
return ((a.l<b.l)||(a.l==b.l)&&(a.v>b.v));
}
int main(){
freopen("machine.in","r",stdin);
freopen("machine.out","w",stdout);
for (t=read();t;t--){
qwq.clear();
power=true;
ans=0;
n=read();
m=read();
for(int i=1;i<=n;++i){
zu[i].l=read();
zu[i].r=read();
zu[i].num=read();
zu[i].v=-1;
}
for(int i=n+1;i<=n+m;++i){
zu[i].l=read();
zu[i].r=read();
zu[i].num=read();
zu[i].v=1;
}
sort(zu+1,zu+1+n+m,comp);
for (int i=1;i<=n+m;i++){
if (zu[i].v==1)
qwq.insert(zu[i]);
else while (zu[i].num){
qaq=qwq.lower_bound(zu[i]);
if (qaq==qwq.end()){
power=false;
puts("No");
break;
}
data tmp=*qaq;
qwq.erase(qaq);
if (zu[i].num<tmp.num) {tmp.num-=zu[i].num,qwq.insert(tmp),zu[i].num=0;}
else {zu[i].num-=tmp.num;}
}
if (power==false) break;
}
if (power) puts("Yes");
}
}


神奇的代码
这种纯考STL的题.......还出了两题

第一次打set,第一次打迭代器,第一次打重载运算符啊啊QAQ
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: