D. Developing Game
 

Pavel is going to make a game of his dream. However, he knows that he can't make it on his own so he founded a development company and hired n workers of staff. Now he wants to pick n workers from the staff who will be directly responsible for developing a game.

Each worker has a certain skill level vi. Besides, each worker doesn't want to work with the one whose skill is very different. In other words, the i-th worker won't work with those whose skill is less than li, and with those whose skill is more than ri.

Pavel understands that the game of his dream isn't too hard to develop, so the worker with any skill will be equally useful. That's why he wants to pick a team of the maximum possible size. Help him pick such team.

Input

The first line contains a single integer n (1 ≤ n ≤ 105) — the number of workers Pavel hired.

Each of the following n lines contains three space-separated integers liviri (1 ≤ li ≤ vi ≤ ri ≤ 3·105) — the minimum skill value of the workers that the i-th worker can work with, the i-th worker's skill and the maximum skill value of the workers that the i-th worker can work with.

Output

In the first line print a single integer m — the number of workers Pavel must pick for developing the game.

In the next line print m space-separated integers — the numbers of the workers in any order.

If there are multiple optimal solutions, print any of them.

Examples
input
4
2 8 9
1 4 7
3 6 8
5 8 10
output
3
1 3 4
 题意:
  给你n个人的 位置v[i],同时每个人有一个可接受范围 l[i], r[i];
  现在让你选尽量多的人,使得被选的人 都能互相接受
  输出人数及选择方案
题解
  这个题看到不太会
  对于两个人来说要让它们相互接受可以有以下情况
          l1          v1              r1
                  l2  v2      r2
             l2            v2     r2 
            l2           v2              r2
           l2                     v2     r2
  发现一些规则
  就是相交范围就是l1 v1 与 l2 v2的相交的一段,但是当v2超过r1的时候,就不可行了
  所有我们可以想到一种 加上,减去的操作,
  当v1 出现我们在线段树上加入l1,v1的这段有效的区间
  当走过r1的时候 把l1 v1在线段树上减去即可 
  显然对于一条线段要拆成两条线段, l1 v1 1 v1 和   l1 v1 -1 v2
  再在线段树上操作就可以了
  统计答案的时候呢,也可以利用线段树有效区间出来
  @doubility
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
#pragma comment(linker, "/STACK:102400000,102400000")
#define ls i<<1
#define rs ls | 1
#define mid ((ll+rr)>>1)
#define pii pair<int,int>
#define MP make_pair
typedef long long LL;
const long long INF = 1e18+1LL;
const double Pi = acos(-1.0);
const int N = 5e5+, M = 2e5+, mod = 1e9+, inf = 2e9; int n;
int tag[N*],mx[N*];
void push_up(int i) {
mx[i] = max(mx[ls],mx[rs]);
}
void push_down(int i,int ll,int rr) {
if(tag[i] != && ll != rr) {
tag[ls] += tag[i];
tag[rs] += tag[i];
mx[ls] += tag[i];
mx[rs] += tag[i];
tag[i] = ;
}
}
void update(int i,int ll,int rr,int l,int r,int v)
{
push_down(i,ll,rr);
if(l == ll && r == rr) {
tag[i] += v;
mx[i] += v;
return ;
}
if(r <= mid) update(ls,ll,mid,l,r,v);
else if(l > mid) update(rs,mid+,rr,l,r,v);
else {
update(ls,ll,mid,l,mid,v);
update(rs,mid+,rr,mid+,r,v);
}
push_up(i);
} int query(int i,int ll,int rr,int x) {
push_down(i,ll,rr);
if(ll == rr) return ll;
if(mx[ls] == x) return query(ls,ll,mid,x);
else return query(rs,mid+,rr,x);
push_up(i);
}
struct ss{
int l,r,h,in;
ss(int l = , int r = , int h = ,int in = ) : l(l), r(r), h(h),in(in) {}
bool operator < (const ss & b) const {
return h < b.h || h == b.h && in > b.in;
}
}p[N],P[N];
int main() {
scanf("%d",&n);
for(int i = ; i <= n; ++i) {
int l,v,r;
scanf("%d%d%d",&l,&v,&r);
p[i] = ss(l,v,v,);
p[i+n] = ss(l,v,r,-);
P[i] = ss(l,r,v,);
}
int m = n << ;
sort(p+,p+m+);
int ans = ,x,y;
for(int i = ; i <= m; ++i) {
int l = p[i].l, r = p[i].r;
update(,,,l,r,p[i].in);
if(mx[] > ans) {
ans = mx[];
x = query(,,,mx[]);
y = p[i].h;
}
}
printf("%d\n",ans);
for(int i = ; i <= n; ++i) {
if(P[i].l <= x && P[i].r >= y && P[i].h >= x && P[i].h <= y) printf("%d\n",i);
}
return ;
}

Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并的更多相关文章

  1. Codeforces Round #222 (Div. 1) D. Developing Game

    D - Developing Game 思路:我们先枚举左边界,把合法的都扣出来,那么对于这些合法的来说值有v 和 r两维了,把v, r看成线段的两端, 问题就变成了,最多能选多少线段 使得不存在这样 ...

  2. Codeforces Round #603 (Div. 2) E. Editor(线段树)

    链接: https://codeforces.com/contest/1263/problem/E 题意: The development of a text editor is a hard pro ...

  3. Codeforces Round #244 (Div. 2) B. Prison Transfer 线段树rmq

    B. Prison Transfer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset/pro ...

  4. Codeforces Round #530 (Div. 2) F (树形dp+线段树)

    F. Cookies 链接:http://codeforces.com/contest/1099/problem/F 题意: 给你一棵树,树上有n个节点,每个节点上有ai块饼干,在这个节点上的每块饼干 ...

  5. Codeforces Round #222 (Div. 1) D. Developing Game 扫描线

    D. Developing Game 题目连接: http://www.codeforces.com/contest/377/problem/D Description Pavel is going ...

  6. Codeforces Round #546 (Div. 2) E 推公式 + 线段树

    https://codeforces.com/contest/1136/problem/E 题意 给你一个有n个数字的a数组,一个有n-1个数字的k数组,两种操作: 1.将a[i]+x,假如a[i]+ ...

  7. Codeforces Round #275 Div.1 B Interesting Array --线段树

    题意: 构造一个序列,满足m个形如:[l,r,c] 的条件. [l,r,c]表示[l,r]中的元素按位与(&)的和为c. 解法: 线段树维护,sum[rt]表示要满足到现在为止的条件时该子树的 ...

  8. Codeforces Round #271 (Div. 2) F. Ant colony 线段树

    F. Ant colony time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  9. Codeforces Round #406 (Div. 2) D. Legacy (线段树建图dij)

    D. Legacy time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

随机推荐

  1. 【BZOJ-1898】Swamp 沼泽鳄鱼 矩阵乘法

    1898: [Zjoi2005]Swamp 沼泽鳄鱼 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1012  Solved: 566[Submit][S ...

  2. <<< 判断提交方式是get还是post

    if("GET".equals(request.getMethod())){ System.out.println("提交方式是GET"); }else if( ...

  3. CLI:如何使用Go开发命令行

    CLI或者"command line interface"是用户在命令行下交互的程序.由于通过将程序编译到一个静态文件中来减少依赖,一次Go特别适合开发CLI程序.如果你编写过安装 ...

  4. PC工作原理

    提到"技术"这个词时,大多数人都会想到计算机.事实上,我们生活中的方方面面都离不开计算机部件.家里的电器设备有内置的微处理器,例如电视机.甚至汽车里也装有计算机.但是,提到计算机大 ...

  5. curl实现发送Get和Post请求(PHP)

    1.CURL介绍 CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 CURL 库.本文将介绍 CURL 的一些高级特性 ...

  6. [Kerberos] Java client访问kerberos-secured cluster

    使用java client访问kerberos-secured cluster,最重要的是先从admin那里拿到可用的keytab文件,用来作认证.接下来就是调整连接的配置.以下先用连接hdfs为例进 ...

  7. 如何修改 Total commander 配置文件的路径

    在官方主页 http://www.ghisler.com/tools.htm#other 上提供了一个名为 INIreloc.exe  的小程序,它可以变更ini文件的保存位置.

  8. mapReduce编程之auto complete

    1 n-gram模型与auto complete n-gram模型是假设文本中一个词出现的概率只与它前面的N-1个词相关.auto complete的原理就是,根据用户输入的词,将后续出现概率较大的词 ...

  9. Win10环境下安装Vmware+Ubuntu14 注意点

    下载相关软件正常安装完成后可能会碰到以下两个问题,这里备注一下,备用 1.Ubuntu的root密码设置 2.Vmware网络连接设成桥接之后,Win10可以ping通Ubuntu,但Ubuntu无法 ...

  10. libeventReferenceManual阅读笔记

    一.01_intro.html Example:A low-level ROT13 server with Libevent 这是一个利用event实现的server实例 Example:A simp ...