题目链接:

luogu

题目分析:

把每个人当成一个三元组\([l_i, r_i, v_i]\)

考虑每个人对哪个能力区间\([L, R]\)有贡献

应该是左端点在\([l_i, v_i]\),右端点在\([v_i, r_i]\)的区间

拍到一个二维平面上,求最多有多少个矩形交一起

线段树维护扫描线即可

代码:

#include<bits/stdc++.h>
#define N (600000 + 10)
using namespace std;
inline int read() {
int cnt = 0, f = 1; char c = getchar();
while (!isdigit(c)) {if (c == '-') f = -f; c = getchar();}
while (isdigit(c)) {cnt = (cnt << 3) + (cnt << 1) + (c ^ 48); c = getchar();}
return cnt * f;
} int n, Y[N], cnt, ans = 0, ansx, ansy, tot;
int l[N], r[N], v[N];
struct node2 {
int x, Y1, Y2, tag;
}seg[N << 1]; struct node {
int l, r;
int tag, gmax, pos;
#define l(p) tree[p].l
#define r(p) tree[p].r
#define tag(p) tree[p].tag
#define gmax(p) tree[p].gmax
#define pos(p) tree[p].pos
} tree[N << 2]; void pushdown(int p) {
tag(p << 1) += tag(p);
tag(p << 1 | 1) += tag(p);
gmax(p << 1) += tag(p);
gmax(p << 1 | 1) += tag(p);
tag(p) = 0;
} void pushup(int p) {
if (gmax(p << 1) > gmax(p << 1 | 1)) {
pos(p) = pos(p << 1);
gmax(p) = gmax(p << 1);
} else {
pos(p) = pos(p << 1 | 1);
gmax(p) = gmax(p << 1 | 1);
}
} void build (int p, int l, int r) {
l(p) = l, r(p) = r;
if (l == r) {pos(p) = Y[l]; return;}
int mid = (l + r) >> 1;
build (p << 1, l, mid);
build (p << 1 | 1, mid + 1, r);
pos(p) = pos(p << 1);
} void modify(int p, int l, int r, int k) {
pushdown(p);
if (l <= Y[l(p)] && r >= Y[r(p)]) {tag(p) += k, gmax(p) += k; return;}
int mid = (l(p) + r(p)) >> 1;
if (l <= Y[mid]) modify(p << 1, l, r, k);
if (r > Y[mid]) modify(p << 1 | 1, l, r, k);
pushup(p);
}
bool cmp(node2 a, node2 b) {
return a.x == b.x ? a.tag > b.tag : a.x < b.x;
} int main() {
// freopen("data.in", "r", stdin);
// freopen("myself.out", "w", stdout);
n = read();
for (register int i = 1; i <= n; ++i) {
l[i] = read(), v[i] = read(), r[i] = read();
seg[++tot].x = l[i], seg[tot].Y1 = v[i], seg[tot].Y2 = r[i], seg[tot].tag = 1, Y[tot] = v[i];
seg[++tot].x = v[i], seg[tot].Y1 = v[i], seg[tot].Y2 = r[i], seg[tot].tag = -1, Y[tot] = r[i];
}
sort (Y + 1, Y + tot + 1);
for (register int i = 1; i <= tot; ++i) if (Y[i] != Y[i + 1]) Y[++cnt] = Y[i];
build (1, 1, cnt);
sort (seg + 1, seg + tot + 1, cmp);
// for (register int i = 1; i <= cnt; ++i) cout<<Y[i]<<" "; return 0;
for (register int i = 1; i <= tot; ++i) {
modify(1, seg[i].Y1, seg[i].Y2, seg[i].tag);
// cout<<gmax(1)<<" ";
if (gmax(1) > ans) {
ans = gmax(1);
ansx = seg[i].x;
ansy = pos(1);
}
}
// return 0;
printf("%d\n", ans);
// cout<<ansx<<" "<<ansy<<endl; return 0;
for (register int i = 1; i <= n; ++i)
if (v[i] <= ansy && r[i] >= ansy && l[i] <= ansx && v[i] >= ansx) printf("%d ", i);
return 0;
}

CF377D Developing Game的更多相关文章

  1. Codeforces Round #222 (Div. 1) D. Developing Game 线段树有效区间合并

    D. Developing Game   Pavel is going to make a game of his dream. However, he knows that he can't mak ...

  2. [C# WPF]MoeEroViewer Developing Log

    [C# WPF]MoeEroViewer Developing Log 1st - Base Document run on Https://github.com/Amarillys/MoeEroVi ...

  3. Google Developing for Android 三 - Performance最佳实践

    Google Developing for Android 三 - Performance最佳实践 发表于 2015-06-07   |   分类于 Android最佳实践 原文 Developing ...

  4. Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog

    Google Developing for Android 二 - Memory 最佳实践   |   分类于 Android最佳实践 原文:Developing for Android, II Th ...

  5. Google Developing for Android 一 - 相关上下文介绍

    前几天在G+上看到Google Developers站点,有一个Android系列的文章,分享到个人微博,周末闲来没事就学写了下,把它们简单的翻译了下,没想到一发不可收拾,六篇文章全部都翻译完了,有些 ...

  6. AX7: Get started developing

    This blog will show how you can start making a customization in AX 7 by showing you the steps needed ...

  7. Spark(2) - Developing Application with Spark

    Exploring the Spark shell Spark comes bundled with a PERL shell, which is a wrapper around the Scala ...

  8. Codeforces Round #322 (Div. 2) C. Developing Skills 优先队列

    C. Developing Skills Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/581/p ...

  9. Developing iOS8 Apps with Swift——iOS8概览

    iOS 8 概览 斯坦福公开课--Developing iOS8 Apps with Swift学习笔记 想学习Swift,但是相应的教程不是很多,在CoCoaChina社区闲逛时恰好发现了这门课程, ...

随机推荐

  1. 随笔记录 误删boot恢复 2019.8.7

    系统还原: 1. 2. 3. 4. 5.进入硬盘 6.挂载光盘,安装恢复boot 7.安装grub2 8.重建grub.cfg文件  

  2. windows server 常用功能(一)

    最近做了一个windows server 2016的环境,也遇到了很多问题,作为一个新手,又没有很好的记录下解决方案,因为写这篇文章的时间有点晚,因此只能留下一些思路以供参考. 1.作为一个serve ...

  3. AF_UNIX

    3.SOCK_SEQPACKET SOCK_SEQPACKET提供一个顺序确定的,可靠的,双向基于连接的socket endpoint. 与SOCK_STREAM不同的是,它保留消息边界.(表明发送两 ...

  4. drop,delete与truncate的区别

    drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句. (1) DELETE语句执行删除的过程是每次从表中删除一行,并且同时将 ...

  5. Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实 现)interface(接口

    匿名的内部类是没有名字的内部类.不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现

  6. c 语言函数分析

    第一个参数为指向线程标识符的指针. 第二个参数用来设置线程属性. 第三个参数是线程运行函数的起始地址. 最后一个参数是运行函数的参数. result = pthread_create(&tid ...

  7. java web应用用户上传图片的存储地址

    原来工程的上传图片存储地址在web应用的目录下,并且是硬编码到其中的: 每次使用maven tomcat:redeploy以后,这个目录就没有了. 现在想要把上传图片的位置移动到tomcat的weba ...

  8. Springboot 上传文件

    @PostMapping("/upload")//springboot可以直接扫描resource下的static文件夹下的静态文件 public String upload(@R ...

  9. APIO 2017 商旅 洛谷3778

    Description 在广阔的澳大利亚内陆地区长途跋涉后,你孤身一人带着一个背包来到了科巴.你被这个城市发达而美丽的市场所 深深吸引,决定定居于此,做一个商人.科巴有个集市,集市用从1到N的整数编号 ...

  10. NOIp2018集训test-10-15 (bike day1)

    B 君的第一题 求斐波那契数列模n的循环节. 1.暴力bsgs,毕姥爷好像说循环节最大是6*n还是多少的,反之比较小,直接bsgs这题是可以过的.但是我非常蠢重载运算符的时候把相等返回成了小于,然后根 ...