Knight Tournament
time limit per test

3 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

Hooray! Berl II, the king of Berland is making a knight tournament. The king has already sent the message to all knights in the kingdom and they in turn agreed to participate in this grand event.

As for you, you're just a simple peasant. There's no surprise that you slept in this morning and were late for the tournament (it was a weekend, after all). Now you are really curious about the results of the tournament. This time the tournament in Berland
went as follows:

  • There are n knights participating in the tournament. Each knight was assigned his unique number — an integer from 1 to n.
  • The tournament consisted of m fights, in the i-th
    fight the knights that were still in the game with numbers at least li and
    at most rihave
    fought for the right to continue taking part in the tournament.
  • After the i-th fight among all participants of the fight only one knight won — the knight number xi,
    he continued participating in the tournament. Other knights left the tournament.
  • The winner of the last (the m-th) fight (the knight number xm)
    became the winner of the tournament.

You fished out all the information about the fights from your friends. Now for each knight you want to know the name of the knight he was conquered by. We think that the knight number b was
conquered by the knight number a, if there was a fight with both of these knights present and the winner was the knight number a.

Write the code that calculates for each knight, the name of the knight that beat him.

Input

The first line contains two integers nm (2 ≤ n ≤ 3·105; 1 ≤ m ≤ 3·105) —
the number of knights and the number of fights. Each of the following m lines contains three integers li, ri, xi (1 ≤ li < ri ≤ nli ≤ xi ≤ ri) —
the description of the i-th fight.

It is guaranteed that the input is correct and matches the problem statement. It is guaranteed that at least two knights took part in each battle.

Output

Print n integers. If the i-th
knight lost, then the i-th number should equal the number of the knight that beat the knight number i.
If the i-th knight is the winner, then the i-th
number must equal 0.

Sample test(s)
input
4 3
1 2 1
1 3 3
1 4 4
output
3 1 4 0 
input
8 4
3 5 4
3 7 6
2 8 8
1 8 1
output
0 8 4 6 4 8 6 1 
Note

Consider the first test case. Knights 1 and 2 fought the first fight and knight 1 won. Knights 1 and 3 fought the second fight and knight 3 won. The last fight was between knights 3 and 4, knight 4 won.


题意:有n个人參加比赛,共同拥有m场比赛,每场比赛给出l,r,x,表示[l,r]区间内的人都被x打败,问最后每一个人是被谁打败的,输出那个人的编号,冠军输出0.
分析:这题能够用set,也能够用线段树做。
set解题方法:開始时把全部的人都加进去,然后把输了的人从set中删除就可以。
#include<iostream>
#include<set>
#include<cstring>
using namespace std;
const int MAXN = 300010;
int ans[MAXN];
set<int> s;
set<int>::iterator it, it_l, tmp[MAXN];
int main()
{
int n, m, l, r, x, num;
while(cin >> n >> m) {
s.clear();
memset(ans, 0, sizeof(ans));
for(int i = 1; i <= n; i++)
s.insert(i);
for(int i = 0; i < m; i++) {
cin >> l >> r >> x;
it_l = s.lower_bound(l); //寻找開始删除的位置
num = 0;
for(it = it_l; *it <= r && it != s.end(); it++) {
if(*it != x) {
ans[*it] = x;
tmp[num++] = it; //不能直接删,由于每删除一个元素,set会自己主动调整内部结构
}
}
for(int j = 0; j < num; j++)
s.erase(tmp[j]);
}
for(int i = 1; i < n; i++)
cout << ans[i] << " ";
cout << ans[n] << endl;
}
return 0;
}

CodeForce 356A Knight Tournament(set应用)的更多相关文章

  1. CodeForces - 356A Knight Tournament

    http://codeforces.com/problemset/problem/356/A 首先理解题意 每次给出l 和r  在l - r之间还有资格的选手中得出一个胜者 暴力思路: 首先维护还有资 ...

  2. Knight Tournament 合并区间

    Hooray! Berl II, the king of Berland is making a knight tournament. The king has already sent the me ...

  3. Knight Tournament (set)

    Hooray! Berl II, the king of Berland is making a knight tournament. The king has already sent the me ...

  4. CodeForces - 357C Knight Tournament 伪并查集(区间合并)

    Knight Tournament Hooray! Berl II, the king of Berland is making a knight tournament. The king has a ...

  5. D - Knight Tournament(set)

    Problem description Hooray! Berl II, the king of Berland is making a knight tournament. The king has ...

  6. codeforces 357C Knight Tournament(set)

    Description Hooray! Berl II, the king of Berland is making a knight tournament. The king has already ...

  7. 【Codeforces 356A】Knight Tournament

    [链接] 我是链接,点我呀:) [题意] n个人矩形m场比赛 每场比赛由编号为li~ri且之前没有被淘汰的人进行. 已知第i场的winner是xi winner会把这一场其他所有的人都淘汰. 问你n个 ...

  8. Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)

    脑子又卡了...来一发set的,STL真心不熟. #include <stdio.h> #include <string.h> #include <iostream> ...

  9. Knight Tournament

    Codeforces Round #207 (Div. 1) A:http://codeforces.com/problemset/problem/356/A 题意:给你n匹马,然后有m场比赛.每场比 ...

随机推荐

  1. Linux入门:文件权限、用户、用户组(比较清楚)

    单个文件名或目录名长度不超过255字符: 文件或目录的绝对路径长度不超过4096字符:   一.文件所有者与用户组     一个文件有很多属性,包括文件类型.文件权限.文件隐藏权限.文件所有者.用户组 ...

  2. USB基础简介

    一.USB2.0 Universal Serial Bus (通用串行总线)  符合USB总线数据通信要求的通信协议 1.意义 1.易用(热插拔.即插即用) 2.易扩充(USBHub可同时操作127个 ...

  3. 环保创业的可行之道——Leo鉴书上66

    近2年,我一直在关注不同企业的发展历程,国内的国外的.看他们成功其中的共性与特性.<蚯蚓创业记>无疑给我开了扇窗--环保企业的怎样发展与壮大.读者还能从书里读出普通年轻人坚持自己梦想最终得 ...

  4. Eclipse用法和技巧十一:分栏显示

    在编码的时候,有时候需要同时看到两个文件的代码.或者在代码走读的时候,能同时看到两个文件的代码能加快我们对代码的理解.来看看如何在eclipse中同时显示两个文件的代码.        步骤一:拖住一 ...

  5. js 常用方法记事本

    1.获取被选中行的名称<tab选项卡中为iframe> /* S 获取首页被选中的选项卡名称 */ var currTab = $("#layout_center_tabs&qu ...

  6. 1.1.0-学习Opencv与MFC混合编程之---全屏截图,保存为BMP图像(并增加快捷键)

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961677 Ø  添加全屏截图菜单项,菜单项的属性如下; Ø  为该菜单项建立类向导. 编辑消息处理函 ...

  7. mui如何增加自定义字体icon图标

    http://ask.dcloud.net.cn/article/128 字体地址:http://www.iconfont.cn/

  8. UVA 10201 Adventures in Moving - Part IV(dp)

    Problem A: Adventures in Moving - Part IV To help you move from Waterloo to the big city, you are co ...

  9. SRM 582 Div II Level Three: ColorTheCells, Brute Force 算法

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12581 Burte Force 算法,求解了所有了情况,注意  ...

  10. UML之九图概述

    最近看了UML的九种图的讲解,这九种图在我们以后的学习中起着举足轻重的作用,不管是在写文档,还是在对系统的需求.设计进行分析时,都很重要,所以首先做一下概述,希望能和大家分享. 首先和大家展示一下我对 ...