Clique Problem

CodeForces - 527D

所谓图的极大团是指在一个无向图中找到最多的点,使得这些点构成的图(即导出子图)是一个完全图,然而这个问题至今没有有效的多项式解法,当然在某些特殊条件下,这个问题具备多项式解法。

我们给出数轴上n个互不相同的点,对于每个点i(1<=i<=n),都有两个属性:坐标xi和重量wi。对于任意的两个点,当它们的距离大于等于它们的重量之和时,它们之间就连有一条边。
 
现在要求你针对这个特殊的图求出它的极大团中有几个点。

Input

输入的第一行是一个正整数n,表示有几个互不相同的点。
接下来n行,每行两个整数x, w,表示第i个点的坐标和重量。
 
n<=200000
其中 0<=xi<=10^9 1<=wi<=10^9
保证点的坐标互不相同

Output

输出一个整数,为极大团的点数。

Sample Input

 
4
2 3
3 1
6 1
0 2
 

Sample Output

3

Hint

样例如图:

sol:这题咋一看似乎Div2的D,其实也就Div2的A题的难度

令Xi>Xj,则当Xi-Xj >= Wi+Wj时有连边,移项以后就是 Xi-Wi >= Xj+Wj

然后就得到一个序列,每个元素有两个变量F1,F2,答案就是让你求一个最长不下降子序列满足每一项的F1>前一项的F2,因为是1e9,所以离散以下,套上树状数组模板即可

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline ll read()
{
ll s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(ll x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=;
int n,dp[N];
int Hash[N<<];
struct Point
{
int X,W,F1,F2;
}P[N];
inline bool cmp_X(Point p,Point q)
{
return p.X<q.X;
}
struct BIT
{
int Max[N<<];
#define lowbit(x) ((x)&(-x))
inline void Ins(int x,int Val)
{
while(x<=*Hash)
{
Max[x]=max(Max[x],Val);
x+=lowbit(x);
}
}
inline int Que(int x)
{
int ans=;
while(x)
{
ans=max(ans,Max[x]);
x-=lowbit(x);
}
return ans;
}
}T;
int main()
{
int i,ans=;
R(n);
for(i=;i<=n;i++)
{
R(P[i].X); R(P[i].W);
P[i].F1=P[i].X-P[i].W;
P[i].F2=P[i].X+P[i].W;
Hash[++*Hash]=P[i].F1;
Hash[++*Hash]=P[i].F2;
}
sort(P+,P+n+,cmp_X);
sort(Hash+,Hash+*Hash+);
*Hash=unique(Hash+,Hash+*Hash+)-Hash-;
for(i=;i<=n;i++)
{
P[i].F1=lower_bound(Hash+,Hash+*Hash+,P[i].F1)-Hash;
P[i].F2=lower_bound(Hash+,Hash+*Hash+,P[i].F2)-Hash;
}
for(i=;i<=n;i++)
{
dp[i]=T.Que(P[i].F1)+;
T.Ins(P[i].F2,dp[i]);
ans=max(ans,dp[i]);
}
Wl(ans);
return ;
}
/*
Input
4
2 3
3 1
6 1
0 2
Output
3
*/

codeforces527D的更多相关文章

  1. CodeForces527D. Fuzzy Search

    time limit per test:3 seconds memory limit per test:256 megabytes input:standard input output:standa ...

  2. Codeforces 刷水记录

    Codeforces-566F 题目大意:给出一个有序数列a,这个数列中每两个数,如果满足一个数能整除另一个数,则这两个数中间是有一条边的,现在有这样的图,求最大联通子图. 题解:并不需要把图搞出来, ...

随机推荐

  1. 【redis】1.redis-windows安装+配置介绍

    1.下载windows版本redis 官方下载地址:http://redis.io/download,不过官方没有64位的Windows下的可执行程序,目前有个开源的托管在github上, 地址:ht ...

  2. Jmeter(三十五)_分布式

    jmeter分布式简单步骤说明: 1:添加远程服务器IP到配置文件 在JMETER_HOME / bin / jmeter.properties中,找到名为“ remote_hosts ” 的属性,并 ...

  3. Bean笔记

    为什么需要Bean , 因为 Aop 需要. 顺序 InstantiationAwareBeanPostProcessor , BeanPostProcessor 每个Bean都会执行这两个组件的相关 ...

  4. JWT认证原理及使用

    一.JWT原理: 参考文章:https://www.jianshu.com/p/180a870a308a 1.传统的登录方式: 浏览器输入用户名密码,服务端校验通过,根据用户信息生成一个token,将 ...

  5. 二十一、当锚点遇到fixed(margin和padding)

    当锚点点击跳转的时候,如果上方有fixed,锚点跳转会默认跳转到top为0的地方,有一部分就被遮挡了 解决方法:(像素值随便给的) 给锚点跳转到的具体内容加padding-top:-50px:marg ...

  6. H5 28-优先级之权重问题

    28-优先级之权重问题 我是段落 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  7. 解析vue2.0的diff算法 虚拟DOM介绍

    react虚拟dom:依据diff算法台 前端:更新状态.更新视图:所以前端页面的性能问题主要是由Dom操作引起的,解放Dom操作复杂性 刻不容缓 因为:Dom渲染慢,而JS解析编译相对非常非常非常快 ...

  8. 解决object at 0x01DB75F0

    python在学习过程中吗,由于常常会出现代码运行没报错,但输出的却不是我们想要的结果(图表,列表等等),而出现类似 <filter object at 0x01DB75F0>的情况,比如 ...

  9. pip 安装 和 卸载 django

    1. 在dos命令行中输入 pip 如下命令进行安装: 安装最新的版本的 Django 命令如下: pip install django 安装 指定版本的 Django 命令如下: pip insta ...

  10. 福州大学软件工程1816 | W班 第10次作业[个人作业——软件产品案例分析]

    作业链接 个人作业--软件产品案例分析 评分细则 本次个人项目分数由两部分组成(课堂得分(老师/助教占比60%,学生占比40%)满分40分+博客分满分60分) 课堂得分和博客得分表 评分统计图 千帆竞 ...