您的位置:首页 > 其它

bzoj4143

2015-07-22 23:25 393 查看
记录每天最早开始和最晚结束的就ok了

#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#define clr(a,x) memset(a,x,sizeof(a))
#define rep(i,l,r) for(int i=l;i<r;i++)
typedef long long ll;
using namespace std;
int read()
{
char c=getchar();
int ans=0,f=1;
while(!isdigit(c)){
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)){
ans=ans*10+c-'0';
c=getchar();
}
return ans*f;
}
const int maxn=500050,maxm=25;
int n,m,l[maxn],r[maxn],last[maxm],first[maxm],t;
int main()
{
n=read(),m=read();
rep(i,1,n+1){
l[i]=read();r[i]=read();t=read();
if(!last[t]||l[last[t]]<l[i]) last[t]=i;
if(!first[t]||r[first[t]]>r[i]) first[t]=i;
}
rep(i,1,m+1){
if(!first[i]||l[last[i]]<=r[first[i]]) printf("NIE\n");
else printf("TAK %d %d\n",first[i],last[i]);
}
return 0;
}


View Code

4143: [AMPPZ2014]The Lawyer

Time Limit: 10 Sec Memory Limit: 256 MBSec Special Judge
Submit: 167 Solved: 127
[Submit][Status][Discuss]

Description

Byteasar要制订m天的会议计划,一共有n场会议,第i场会议开始于第d[i]天的第a[i]秒,结束于第d[i]天的第b[i]秒。
对于每一天,请找出这一天的两场会议i,j,使得它们不冲突,即不存在一个数k同时满足a[i]<=k<=b[i]以及a[j]<=k<=b[j]。

Input

第一行包含两个正整数n,m(2<=n<=500000,1<=m<=20),表示会议的场数和天数。
接下来n行,每行包含三个正整数a[i],b[i],d[i](1<=a[i]<b[i]<=80000000,1<=d[i]<=m),描述一场会议。

Output

输出m行。第i行输出第i天的答案,如果无解,输出NIE,否则输出TAK,然后输出这一天参加的两场会议的编号,
如有多组解,输出任意一组。

Sample Input

6 3

3 5 1

2 4 2

1 8 1

6 7 3

3 5 2

7 12 1

Sample Output

TAK 1 6

NIE

NIE

HINT

Source

鸣谢Claris上传

[Submit][Status][Discuss]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: