看直播 csust oj
Description
小明喜欢看直播,他订阅了很多主播,主播们有固定的直播时间 [Li, Ri] 。
可是他网速只有2M,不能同时播放两个直播,所以同一时间只能看一个直播。
并且他只会去看能完整看完的直播(从开播到停播都能观看)。
他想知道最多能看多长时间的直播呢?
注意 [1, 3] 和 [3, 4] 不能两者都选择。
Input
第一行一个N。
接下来N行每行两个整数Li, Ri。
1 <= N <= 2e5
1 <= Li <= Ri <= 1e9
Output
输出最多能看的时间。
Sample Input 1
3
1 3
2 6
5 8
Sample Output 1
7
这个题目不是特别难,可以用很多方法写。
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int INF = 0x3f3f3f3f;
const int maxn = 4e5 + ;
struct node
{
ll l, r, com;
node(ll l=,ll r=,ll com=):l(l),r(r),com(com){}
}ex[maxn];
ll dp[maxn], a[maxn];
struct edge
{
int ed, w;
edge(int ed=,int w=):ed(ed),w(w){}
};
vector<edge>e[maxn]; int main()
{
int n, tot = ;
scanf("%d", &n);
for(int i=;i<=n;i++)
{
int l, r;
scanf("%d%d", &l, &r);
ex[i] = node(l, r, );
a[++tot] = l;
a[++tot] = r;
}
sort(a + , a + + tot);
int len = unique(a + , a + + tot) - a - ;
for(int i=;i<=n;i++)
{
ex[i].com = ex[i].r - ex[i].l + ;
ex[i].l = lower_bound(a + , a + + len, ex[i].l) - a;
ex[i].r = lower_bound(a + , a + + len, ex[i].r) - a;
e[ex[i].l].push_back(edge(ex[i].r,ex[i].com));
}
for(int i=len;i>=;i--)
{
dp[i] = dp[i + ];
for(int j=;j<e[i].size();j++)
{
edge x = e[i][j];
dp[i] = max(dp[i], dp[x.ed + ] + x.w);
}
}
printf("%lld\n", dp[]);
return ;
}
纯dp
Dragon plus ::
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#define fir first
#define sec second
using namespace std; typedef pair<int,int> P; const int maxn = 2e5+; int n,len;
P s[maxn];
int v[maxn<<];
int Max[maxn<<]; bool cmp(const P& a,const P& b) {
return a.sec<b.sec;
} void pushup(int num) {Max[num] = max(Max[num<<],Max[num<<|]);} void build(int l,int r,int num) {
if(l==r) {
Max[num]=;
return ;
}
int mid = (l+r) >>;
build(l,mid,num<<);
build(mid+,r,num<<|);
pushup(num);
} void modify(int l,int r,int num,int pos,int mods) {
if(pos<l || r <pos) return ;
if(pos<=l&&r<=pos) {
Max[num] = max(Max[num],mods);
return ;
}
int mid = (l+r) >>;
if(pos<=mid) modify(l,mid,num<<,pos,mods);
if(mid< pos) modify(mid+,r,num<<|,pos,mods);
pushup(num);
} int quriy(int l,int r,int num,int le,int ri) {
if(ri<l || r<le) return ;
if(le<=l && r<=ri) return Max[num];
int mid = (l+r) >>;
int ans = ;
if(le<=mid) ans = max(ans,quriy(l,mid,num<<,le,ri));
if(mid< ri) ans = max(ans,quriy(mid+,r,num<<|,le,ri));
return ans;
} int main() {
int now =;
scanf("%d",&n);
for(int i=;i<n;i++) {
scanf("%d%d",&s[i].fir,&s[i].sec);
v[now++] = s[i].fir;
v[now++] = s[i].sec;
}
sort(v,v+now);
sort(s,s+n,cmp);
len = unique(v,v+now)-v;
build(,len,);
for(int i=;i<n;i++) {
int res = s[i].sec -s[i].fir+;
int d = lower_bound(v,v+len,s[i].fir)-v;
int d2 = lower_bound(v,v+len,s[i].sec)-v+;
res += quriy(,len,,,d);
modify(,len,,d2,res);
}
printf("%d\n",quriy(,len,,,len));
return ;
}
dp+线段树
#include <iostream>
#include <algorithm>
#include <cstdio>
#define fir first
#define sec second
using namespace std; typedef pair<int,int> P; const int maxn = 2e5+; bool cmp(const P&a,const P&b) {
return a.sec<b.sec;
} int n,lst;
P s[maxn];
int dp[maxn<<];
int v[maxn<<];
int p[maxn]; int main() {
int now = ;
scanf("%d",&n);
for(int i=;i<n;i++) {
scanf("%d%d",&s[i].fir,&s[i].sec);
v[now++]=s[i].fir;
v[now++]=s[i].sec;
}
int ans = ;
sort(v,v+now);
sort(s,s+n,cmp);
int len = unique(v,v+now)-v;
for(int i=;i<n;i++) {
int d = s[i].sec - s[i].fir+;
int l = lower_bound(v,v+len,s[i].fir)-v;
int r = lower_bound(v,v+len,s[i].sec)-v;
int Max = lower_bound(p,p+lst+,l)-p-;
//cout<<p[Max]<<' '<<dp[p[Max]]<<endl;
dp[r] = max(dp[r],dp[p[Max]]+d);
ans = max(dp[r],ans);
//cout<<r<<' '<<dp[r]<<' '<<lst<<endl;
if(dp[p[lst]] >= dp[r]) continue;
else {
if(p[lst] != r) p[++lst] = r;
}
}
printf("%d\n",ans );
return ;
}
CSUST Online Judge Powered by OnlineJudge Version: -ed4d6
dp+单调队列
#include <bits/stdc++.h>
using namespace std;
const int MAX = 2e5 + ; struct date {
int le, ri;
} a[MAX];
int lsh[MAX * ]; bool cmp(date A, date B) {
if (A.le != B.le) {
return A.le < B.le;
}
else {
return A.ri < B.ri;
}
} int dp[MAX * ];
int s[MAX * ];
int main() {
int n;
scanf("%d", &n);
int cnt = ;
for (int i = ; i <= n; i++) {
scanf("%d%d", &a[i].le, &a[i].ri);
lsh[++cnt] = a[i].le;
lsh[++cnt] = a[i].ri;
} sort(lsh + , lsh + cnt + );
cnt = unique(lsh + , lsh + cnt + ) - lsh - ; sort(a + , a + n + , cmp); for (int i = ; i <= n; i++) {
a[i].le = lower_bound(lsh + , lsh + cnt + , a[i].le) - lsh;
a[i].ri = lower_bound(lsh + , lsh + cnt + , a[i].ri) - lsh;
} int k = ;
int top = , tail = ;
for (int i = ; i <= cnt && k <= n; i++) {
while (i == a[k].le) {
dp[a[k].ri] = max(dp[a[k].ri], lsh[a[k].ri] - lsh[a[k].le] + s[top] + );
k++;
}
while (top <= tail && s[tail] <= dp[i]) {
tail--;
}
s[++tail] = dp[i];
}
int ans = ;
for (int i = ; i <= cnt; i++) {
ans = max(ans, dp[i]);
}
printf("%d\n", ans);
return ;
}
dp+单调队列
看直播 csust oj的更多相关文章
- 从Html5直播到互动直播,看直播协议的选择
目前,国内主流的直播协议有HLS.RTMP.HTTP FLV,适用于不同的直播场景. 一.HLS.RTMP与HTTP FLV 1.HLS HLS 全称是 HTTP Live Streaming, 是一 ...
- 【翻译】Facebook全面推出Watch Party,可多人线上同看直播视频
今天, Facebook全面推出Watch Party——多人共同观看直播功能,用户可以同时查看和评论同一视频. Watch Party先前已在群组中推出,并且正在测试其他类型的帐户.但现在任何个人资 ...
- html5播放m3u8视频,web端看直播
https://github.com/jiqing9006/hLive <!DOCTYPE html> <html> <head> <meta charset ...
- 苹果电脑不安装flash的话怎么看直播
直播这种娱乐方式的兴起,让很多游戏玩家.脱口秀演员.歌手等拥有了一个更加宽广的舞台,可以更好地展现自己的才能.大部分的直播都是采取视频影像的方式直播,只有少部分才会采用纯音频的方式. 由于很多直播网站 ...
- 吃零食 csust oj 贪心
吃零食 桌上有n袋零食,不同的零食会有不同的美味程度wi和腐坏程度di,每种零食在一单位时间内美味程度都会下降di,但是不会降到0以下. qwb每一单位时间可以吃掉一袋零食.现在qwb想要在吃完所有零 ...
- 关于pc端直播
写这篇文章首先是想给自己一个总结.整理,还有就是给那些 没有特别明白直播是怎么回事的人一点 思路 最近公司想要做pc端直播,作为一个自认为很菜的前端实在是不知从何下手,所以只能用国人最爱的百度,搜索了 ...
- Android中直播视频技术探究之---采集摄像头Camera视频源数据进行推流(采用金山云SDK)
一.前言 在之前已经详细介绍了Android中的一种视频数据源:Camera,不了解的同学可以点击进入:Android中Camera使用详解 ,在这篇文章中我们介绍了如何采集摄像头的每一帧数据,然后进 ...
- CNTV视频回看下载地址
这其实不是新方法了,这个方法早在五六年前大家就在用,至今也没失效.但是五六年前那时候这个方法可以下载到过去三个月内CNTV直播过的视频,而现在只能下到一个星期的.之所以要下载回看版本,是因为比栏目版本 ...
- Android 视频直播 SDK
Android 视频直播 SDK接入说明 一.名词解释 分辨率:用于计算机视频处理的图像,以水平和垂直方向上所能显示的像素数来表示分辨率.常见视频分辨率的有1080P即1920x1080,720P即1 ...
随机推荐
- 如何改变Xcode字体大小?
运行Xcode后依次点击左上角Xcode/Preferences/Fonts & Colors里就可以调整,在右边随便点中一个字体就可以调整这个字体的大小和颜色了,按command+a可以将所 ...
- AJ学IOS(02)UI之按钮操作 点击变换 移动 放大缩小 旋转
不多说,先上图片看效果,AJ分享,必须精品 这个小程序主要实现点击方向键可以让图标上下左右动还有放大缩小以及旋转的功能,点击图片会显示另一张图片. 点击变换 其实用到了按钮的两个状态,再State C ...
- 【论文笔记】张航和李沐等提出:ResNeSt: Split-Attention Networks(ResNet改进版本)
github地址:https://github.com/zhanghang1989/ResNeSt 论文地址:https://hangzhang.org/files/resnest.pdf 核心就是: ...
- ajax按楼层加载数据
代码如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...
- 多线程高并发编程(4) -- ReentrantReadWriteLock读写锁源码分析
背景: ReentrantReadWriteLock把锁进行了细化,分为了写锁和读锁,即独占锁和共享锁.独占锁即当前所有线程只有一个可以成功获取到锁对资源进行修改操作,共享锁是可以一起对资源信息进行查 ...
- A 蚂蚁觅食
A. 蚂蚁觅食(一) 单点时限: 1.0 sec 内存限制: 512 MB 一只饥饿的小蚂蚁外出觅食,幸运的小蚂蚁发现了好多食物,但是它只有一次搬食物的机会.可因为力气太小了,它不能搬走重量超过自己体 ...
- vue路由中 Navigating to current location ("/router") is not allowed
报错原因:多次点击同一路由,导致路由被多次添加 解决方法: router/index中添加以下代码: //router/index.js Vue.use(VueRouter) //导入vue路由 co ...
- 两种异常(CPU异常、用户模拟异常)的收集
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 两种异常(CPU异常.用户模拟异常)的收集 文章的核心:异常收集 ...
- Spring5:事务管理【整合Mybatis】
Spring 整合Mybatis 1:导入依赖 <dependencies> <!--测试依赖--> <dependency> <groupId>jun ...
- Java封装 概述
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式.好处:隐藏实现细节,提供公共的访问方式提高了代码的复用性提高安全性 封装原则:将不需要对外提供的内容都隐藏起来把属性隐藏,提供公共方法对其访 ...