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. HyperLedger Fabric 1.0的Transaction处理流程

    如果把区块链比作一个只能读写,不能删改的分布式数据库的话,那么事务和查询就是对这个数据库进行的最重要的操作.以比特币来说,我们通过钱包或者Blockchain.info进行区块链的查询操作,而转账行为 ...

  2. jmeter(二十三)分布式测试

    jmeter用了一年多,也断断续续写了一些相关的博客,突然发现没有写过分布式测试的一些东西,这篇博客就介绍下利用jmeter做分布式测试的一些技术点吧,权当参考... 关于jmeter的介绍和元件作用 ...

  3. Git分支管理规范

    关于Git的一些分支管理规范... 一.分支与角色说明 Git 分支类型 master 分支(主分支) 稳定版本 develop 分支(开发分支) 最新版本 release 分支(发布分支) 发布新版 ...

  4. Redis学习之字典源码分析

    字典,又叫映射,是一种用于保存键值对的抽象数据结构 划重点:抽象数据结构 Redisd字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表结点,而每个哈希表结点就保存了字典中的一个键值对 一.哈 ...

  5. net spider(python 网络爬虫)

    # -*- coding: utf-8 -*- import urllib2,cookielib from bs4 import BeautifulSoup url="http://www. ...

  6. 【H5 音乐播放实例】第一节 音乐详情页制作(1)

    本教程是一个H5音乐播放的详情页制作,实现了H5音乐播放,音轨的跳动,已经较为酷炫的UI界面. 通过本教程,您会学到: 1.H5音乐播放 (带音轨) 2.iconfont字体图标库 3.div+css ...

  7. Python-TXT文本操作

    一.列出IO操作的标识符及描述 标识符 描述 r 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. rb 以二进制格式打开一个文件用于只读.文件指针将会放在文件的开头.这是默认模式. ...

  8. Python-SMTP发送邮件(HTML、图片、附件)

    前言: SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. 一.Python发送HTML ...

  9. D2. Great Vova Wall (Version 2)

    l链接 [https://codeforces.com/contest/1092/problem/D2] 题意 和D1一样只是不能竖直放了 分析 水平放的话,就只可能是相邻等时才可以,而且你会发现 只 ...

  10. Array Queries CodeForces - 797E

    题目链接 非常好的一道题目, 分析,如果用暴力的话,时间复杂度是O(q*n)稳稳的超时 如果用二维DP的话,需要O (n*n)的空间复杂度,会爆空间. 那么分析一下,如果k>sqrt(n)的话, ...