CF863E - Turn Off The TV
题意:对于若干个闭区间 \([l_i,r_i]\),它们构成了一个集合 \(\bigcup_{i\le n}{[l_i,r_i]}\),求一个 \(k\),使得 \(\bigcup_{i\le n}{[l_i,r_i]}=\bigcup_{i\le n,i\ne k}{[l_i,r_i]}\)。
我们可以区间覆盖,首先我们考虑如果只考虑整点的效果。那么就是离散化,在 \(l\) 和 \(r\) 上进行差分标记,然后前缀和求出每个点被覆盖的次数。如果一个区间覆盖的所有位置都被覆盖 \(2\) 次以上,那么就可以选择这个区间。
但是现在我们需要的是实数轴上的区间,如何处理呢?比如说在整点覆盖中,\([1,2]\) 和 \([3,4]\) 就覆盖了 \(1\sim4\) 的所有点,但在实轴上,\(2.5\) 没有被覆盖。
拆点法
我们可以通过所有坐标集体乘 \(2\) 给 \((a,a+1)\) 这个区间建立一个虚拟的点 \(2a+1\),在离散化的同时将 \(2l\pm 1\) 和 \(2r\pm 1\) 四个点一起离散化进去,从而我们就把实轴区间覆盖问题转化为整点区间覆盖问题。
这里没有使用比较方便的区间差分,而是使用了线段树实现区间加/查询。
#include<bits/stdc++.h>
using namespace std;
#define rd(i,n) for(int i=0;i<n;i++)
#define rp(i,n) for(int i=1;i<=n;i++)
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define per(i,a,b) for(int i=max(a,b);i>=min(a,b);i--)
#define st string
#define vt vector
#define pb push_back
//#define int long long
typedef long long ll;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
int q[1200005];
struct node{
int l,r,s,tg;
}sg[4800005];
inline void init(int i,int l,int r){
sg[i].l=l,sg[i].r=r,sg[i].s=0;
if(l==r)return (void)(sg[i].s=q[l]);
init(i<<1,l,l+r>>1);
init(i<<1|1,(l+r>>1)+1,r);
sg[i].s=min(sg[i<<1].s,sg[i<<1|1].s);
}
inline int qry(int i,int l,int r){
if(sg[i].l>r||sg[i].r<l)return 1e9;
if(sg[i].l>=l&&sg[i].r<=r)return sg[i].s;
return min(qry(i<<1,l,r),qry(i<<1|1,l,r));
}
int n,l[200005],r[200005],v[1200005],m;
signed main(){
cin>>n;
rp(i,n)cin>>l[i]>>r[i];
rp(i,n)v[++m]=l[i],v[++m]=r[i],v[++m]=l[i]+1,v[++m]=l[i]-1,v[++m]=r[i]+1,v[++m]=r[i]-1;
sort(v+1,v+1+m);
m=unique(v+1,v+1+m)-v-1;
rp(i,n){
l[i]=lower_bound(v+1,v+1+m,l[i])-v;
r[i]=lower_bound(v+1,v+1+m,r[i])-v;
q[l[i]]++;
q[r[i]+1]--;
}
rp(i,m)q[i]+=q[i-1];
init(1,1,m);
rp(i,n){
if(qry(1,l[i],r[i])>1){
cout<<i<<endl;
return 0;
}
}cout<<-1<<endl;
return 0;
}
//Crayan_r
开闭
我们可以将区间转化为左开右闭的形式,在修改的时候减少一位右端点。
这样有什么好处呢?假如我们当前覆盖的区间是 \([l,r]\),则实际上被标记上的整点区间是 \([l-1,r-1]\)。
但是我们查询的时候查询的是 \([l,r]\),这样,除非原先的右端点在 \(l+1\) 的位置,否则就不会覆盖到 \(l\),也就解决了中间实数没有覆盖的问题。右边也同理。
#include "bits/stdc++.h"
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
#define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i))
static const int INF = 0x3f3f3f3f; static const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
typedef vector<int> vi; typedef pair<int, int> pii; typedef vector<pair<int, int> > vpii; typedef long long ll;
template<typename T, typename U> static void amin(T &x, U y) { if (y < x) x = y; }
template<typename T, typename U> static void amax(T &x, U y) { if (x < y) x = y; }
int main() {
int n;
while (~scanf("%d", &n)) {
vector<int> L(n);
vector<int> R(n);
for (int i = 0; i < n; ++ i)
scanf("%d%d", &L[i], &R[i]), -- L[i];
vector<int> values;
rep(i, n) {
values.push_back(L[i]);
values.push_back(R[i]);
}
sort(values.begin(), values.end());
values.erase(unique(values.begin(), values.end()), values.end());
int X = (int)values.size();
vector<int> add(X + 1);
rep(i, n) {
int l = (int)(lower_bound(values.begin(), values.end(), L[i]) - values.begin());
int r = (int)(lower_bound(values.begin(), values.end(), R[i]) - values.begin());
++ add[l], -- add[r];
}
rep(i, X)
add[i + 1] += add[i];
vector<int> sum(X + 1);
rep(i, X)
sum[i + 1] = sum[i] + (add[i] >= 2);
int ans = -1;
rep(i, n) {
int l = (int)(lower_bound(values.begin(), values.end(), L[i]) - values.begin());
int r = (int)(lower_bound(values.begin(), values.end(), R[i]) - values.begin());
if (sum[r] - sum[l] == r - l) {
ans = i;
break;
}
}
printf("%d\n", ans == -1 ? ans : ans + 1);
}
return 0;
}
CF863E - Turn Off The TV的更多相关文章
- [Codeforces 863E]Turn Off The TV
Description Luba needs your help again! Luba has n TV sets. She knows that i-th TV set will be worki ...
- E. Turn Off The TV Educational Codeforces Round 29
http://codeforces.com/contest/863/problem/E 注意细节 #include <cstdio> #include <cstdlib> #i ...
- 越狱Season 1- Episode 22: Flight
Season 1, Episode 22: Flight -Franklin: You know you got a couple of foxes in your henhouse, right? ...
- 30个HTML初学者建议
The most difficult aspect of running Nettuts+ is accounting for so many different skill levels. If w ...
- 设计模式教程(Design Patterns Tutorial)笔记之三 行为型模式(Behavioral Patterns)
目录 · Strategy · When to use the Strategy Design Pattern? · Sample Code · Observer · When to use the ...
- English trip V1 - 6.Accidents Happen! 发生意外! Teacher:Corrine Key: 过去进行时 was or were + Ving
In this lesson you will learn to talk about past occurences. 过去进行时 课上内容(Lesson) C: Hi, Loki! L: Hi, ...
- Educational Codeforces Round 29(6/7)
1.Quasi-palindrome 题意:问一个字符串(你可以添加前导‘0’或不添加)是否是回文串 思路:将给定的字符串的前缀‘0’和后缀‘0’都去掉,然后看其是否为回文串 #include< ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Livecoding.tv 现正举行iOS及Android App设计比赛
近日,Livecoding.tv, 一个为世界各地的程序员提供在线实时交流的平台,在其网站上发布了一篇通知, 宣布从4月15日至5月15日,会为iOS和Android的开发者举办一场本地移动app设计 ...
- POJ 1966 Cable TV Network
Cable TV Network Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 4702 Accepted: 2173 ...
随机推荐
- 【实时数仓】Day06-数据可视化接口:接口介绍、Sugar大屏、成交金额、不同维度交易额(品牌、品类、商品spu)、分省的热力图 、新老顾客流量统计、字符云
一.数据可视化接口介绍 1.设计思路 后把轻度聚合的结果保存到 ClickHouse 中后,提供即时的查询.统计.分析 展现形式:用于数据分析的BI工具[商业智能(Business Intellige ...
- win10中jupyter notebook设置conda虚拟环境全流程及问题汇总
正常安装流程 1.安装anaconda 必备条件 2.安装jupyter notebook 一般anaconda自带安装 如没有,则在终端安装 conda install jupyter notebo ...
- JAVA中使用最广泛的本地缓存?Ehcache的自信从何而来 —— 感受来自Ehcache的强大实力
大家好,又见面了. 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面.如果感兴趣,欢迎关注以获取后续更新. 作为<深入理解缓存原理与实战设计 ...
- [WPF]数据绑定Demo
目录 1.View模型代码 2.ViewModel模型代码 3.数据模型 4.样例演示 5.一些知识点 这里简单实现一个listbox绑定的功能,符合MVVM模型. View模型代码(View视图以及 ...
- 分布式拒绝服务攻击(DDoS)和僵尸网络(Botnet)
DDos和僵尸网络是相辅相成的两种攻击手段,本文仅介绍基本概念,详细请查看文末参考资料. 分布式拒绝服务攻击(DDoS) 分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布 ...
- flutter2.x报错解决type (RouteSettings) => Route<dynamic> is not a subtype of type (RouteSettings) => Route<dynemic> of function result
flutter2.x报错解决type (RouteSettings) => Route <dynamic>? is not a subtype of type (RouteSetti ...
- 关于 Dev-C++ 中缺少 iconv.h 的问题
前言 在 C++ 中有个扩展库 ext,里面有一些黑科技(hash, splay, binomial_heap 等等), 在 Windows 环境中,我们运行 Dev-C++ 并在头文件写 #incl ...
- SOFAJRaft源码阅读-Netty时间轮算法的实践
SOFAJRaft的定时任务调度器是基于Netty来实现的,所以本文将会基于Netty时间轮算法,然后再结合SOFAJRaft源码进行分析. @Author:Akai-yuan @更新时间:2023/ ...
- Springboot跨域配置的坑
部分时间需要加上crossOrigin
- Unity屏幕永远保持为固定分辨率
Unity屏幕永远保持为固定分辨率 Unity屏幕永远保持为固定分辨率 前言 开题废话 Unity版本 正题: 打开一场景 创建脚本并且编写 挂在脚本到场景摄像机上边 以不同比的分辨率运行程序,并且观 ...