题意

分析



由于异色点必有连边,所以一个点的covered减去两个点共有的covered就是可存在的环数,十分巧妙。

#include <bits/stdc++.h>

using LL = long long;

const int MAXN = 1e5 + 5;

int n, m, D;

std::pair<LL, LL> p1[MAXN], p2[MAXN];

struct Event {
LL x, y; int val; Event() = default;
Event(LL _x, LL _y, int _v): x(_x), y(_y), val(_v) {}
}; std::vector<Event> events; // 扫描线事件
std::vector<LL> xlist, sorted; // x离散化列表,y离散化列表 namespace BIT {
int sum[MAXN * 3]; void Init() {
memset(sum, 0, sizeof sum);
} #define lowbit(x) ((x) & -(x)) void Add(int a, int x) {
for (int i = a; i <= (int)sorted.size(); i += lowbit(i))
sum[i] += x;
} int Query(int a) {
int res = 0;
for (int i = a; i > 0; i -= lowbit(i))
res += sum[i];
return res;
}
} LL minAns = 0, maxAns = 0, minus = 0; // 加、减的总和 int covered[MAXN]; int Y(LL y) {
return std::lower_bound(sorted.begin(), sorted.end(), y) - sorted.begin() + 1;
} LL C2(LL x) {
return x * (x - 1) / 2;
} void Solve() {
events.clear(); // p2中x起止&y&+-1
xlist.clear(); // p2中x起止, p1中x
sorted.clear(); // p2中y,p1中y起止 for (int i = 1; i <= m; ++i) {
events.emplace_back(p2[i].first - D, p2[i].second, 1);
events.emplace_back(p2[i].first + D + 1, p2[i].second, -1); xlist.push_back(p2[i].first - D);
xlist.push_back(p2[i].first + D + 1); sorted.push_back(p2[i].second);
}
for (int i = 1; i <= n; ++i) {
xlist.push_back(p1[i].first); sorted.push_back(p1[i].second - D - 1);
sorted.push_back(p1[i].second + D);
} std::sort(xlist.begin(), xlist.end());
xlist.erase(std::unique(xlist.begin(), xlist.end()), xlist.end()); std::sort(sorted.begin(), sorted.end());
sorted.erase(std::unique(sorted.begin(), sorted.end()), sorted.end()); std::sort(events.begin(), events.end(), [] (const Event &a, const Event &b) { return a.x < b.x; }); BIT::Init(); int j1 = 0, j2 = 1; for (LL x: xlist) {
while (j1 < (int)events.size() && events[j1].x == x) { // 把离散化的纵坐标加进去
BIT::Add(Y(events[j1].y), events[j1].val);
++j1;
} while (j2 <= n && p1[j2].first == x) {
covered[j2] = BIT::Query(Y(p1[j2].second + D)) - BIT::Query(Y(p1[j2].second - D - 1)); // 询问离散化的纵坐标的区间和
++j2;
}
} std::sort(covered + 1, covered + n + 1); for (int i = 1; i <= n; ++i) {
minAns += 1LL * (n - i) * covered[i]; // n-i个比它大
maxAns += 1LL * (n - i) * covered[n - i + 1]; // n-i个比它小
minus += C2(covered[i]); // 加到减的总和里面
}
} int main() {
#ifndef LOCAL
freopen("mhw.in", "r", stdin);
freopen("mhw.out", "w", stdout);
#endif scanf("%d%d%d", &n, &m, &D);
for (int i = 1; i <= n; ++i) {
static int x, y; scanf("%d%d", &x, &y);
p1[i] = std::make_pair(x + y, x - y);
}
for (int i = 1; i <= m; ++i) {
static int x, y; scanf("%d%d", &x, &y);
p2[i] = std::make_pair(x + y, x - y);
}
std::sort(p1 + 1, p1 + n + 1);
std::sort(p2 + 1, p2 + m + 1); Solve(); std::swap(n, m);
std::swap(p1, p2); Solve(); printf("%lld %lld\n", minAns - minus, maxAns - minus); return 0;
}

mine

#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<string>
#include<vector>
#include<list>
#include<deque>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<bitset>
#include<algorithm>
#include<complex>
#pragma GCC optimize ("O0")
using namespace std;
template<class T> inline T read(T&x)
{
T data=0;
int w=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
w=-1;
ch=getchar();
}
while(isdigit(ch))
data=10*data+ch-'0',ch=getchar();
return x=data*w;
}
typedef long long ll;
const int INF=0x7fffffff; const int MAXN=1e5+7;
int n,m,D; pair<ll,ll> p1[MAXN],p2[MAXN]; struct Event
{
ll x,y;
int val; Event()=default;
Event(ll x,ll y,int v): x(x),y(y),val(v) {}
};
vector<Event> events;
vector<ll> xlist,sorted; struct BIT
{
int sum[MAXN*3]; void init()
{
memset(sum,0,sizeof(sum));
}
#define lowbit(x) ((x)&(-x))
void add(int p,int v)
{
for(int i=p;i<=(int)sorted.size();i+=lowbit(i))
sum[i]+=v;
} int query(int p)
{
int res=0;
for(int i=p;i>0;i-=lowbit(i))
res+=sum[i];
return res;
}
}T; ll minans,maxans,minussum;
int covered[MAXN]; int Y(ll y)
{
return lower_bound(sorted.begin(),sorted.end(),y)-sorted.begin()+1;
} ll C2(ll x)
{
return x*(x-1)/2;
} void solve()
{
events.clear();
xlist.clear();
sorted.clear(); for(int i=1;i<=m;++i)
{
events.emplace_back(p2[i].first-D,p2[i].second,1);
events.emplace_back(p2[i].first+D+1,p2[i].second,-1); xlist.push_back(p2[i].first-D);
xlist.push_back(p2[i].first+D+1); sorted.push_back(p2[i].second);
} for(int i=1;i<=n;++i)
{
xlist.push_back(p1[i].first); sorted.push_back(p1[i].second-D-1); // 查询的时候用
sorted.push_back(p1[i].second+D);
} sort(xlist.begin(),xlist.end());
xlist.erase(unique(xlist.begin(),xlist.end()),xlist.end()); sort(sorted.begin(),sorted.end());
sorted.erase(unique(sorted.begin(),sorted.end()),sorted.end()); sort(events.begin(),events.end(),[] (const Event &a,const Event &b) { return a.x<b.x; }); T.init(); int i=0,j=1; for(ll x:xlist)
{
while(i<(int)events.size()&&events[i].x==x)
{
T.add(Y(events[i].y),events[i].val);
++i;
}
while(j<=n&&p1[j].first==x)
{
covered[j]=T.query(Y(p1[j].second+D))-T.query(Y(p1[j].second-D-1));
++j;
}
} sort(covered+1,covered+n+1); for(int i=1;i<=n;++i)
{
minans+=(ll)(n-i)*covered[i];
maxans+=(ll)(i-1)*covered[i];
minussum+=C2(covered[i]);
}
} int main()
{
freopen("mhw.in","r",stdin);
freopen("mhw.out","w",stdout);
read(n);read(m);read(D);
for(int i=1;i<=n;++i)
{
static int x,y;
read(x);read(y);
p1[i]=make_pair(x+y,x-y);
}
for(int i=1;i<=m;++i)
{
static int x,y;
read(x);read(y);
p2[i]=make_pair(x+y,x-y);
}
sort(p1+1,p1+n+1);
sort(p2+1,p2+m+1); solve(); swap(n,m);
swap(p1,p2);
solve(); printf("%lld %lld\n",minans-minussum,maxans-minussum);
// fclose(stdin);
// fclose(stdout);
return 0;
}

test20180922 世界第一的猛汉王的更多相关文章

  1. 【九校3D2T3】世界第一的猛汉王

    [问题描述] 卡普地公司举办了「世界第一的猛汉王」全球大会,来自世界各地的猛汉为了争夺「猛汉王」的名号前来一决高下.现在举行的是弓箭组选拔赛.卡普地公司为比赛新建了一张PVP地图——「猛汉竞技场」.有 ...

  2. 中国人被“清朝GDP世界第一”忽悠了!

    中国人被"清朝GDP世界第一"忽悠了!"鸦片战争前的清朝GDP世界第一",这一说法在中国流传非常广.追根溯源,最早提出这一观点的似乎是英国学者麦迪森,他的一项猜 ...

  3. ZT:阿里合伙人发文:十年磨一剑,自研数据库终拿世界第一

    按:真正做技术的,就该这样. 以下为全文转载 (观察者网讯) 10月24日,阿里巴巴合伙人.高德总裁刘振飞在阿里云开发者社区发文,回忆从2009年启动“去IOE”工程到2019年OceanBase拿下 ...

  4. 旷视6号员工范浩强:高二开始实习,“兼职”读姚班,25岁在CVPR斩获第四个世界第一...

    初来乍到,这个人说话容易让人觉得"狂". "我们将比赛结果提交上去,果不其然,是第一名的成绩."当他说出这句话的时候,表情没有一丝波澜,仿佛一切顺理成章. 他说 ...

  5. 天大福利!世界第一科技出版公司 Springer 免费开放 400 多本电子书!

    前几天,世界著名的科技期刊/图书出版公司施普林格(Springer)宣布:免费向公众开放 400 多本正版的电子书!! Springer 即施普林格出版社,于1842 年在德国柏林创立,20 世纪60 ...

  6. NOIp2018集训test-9-22(am/pm) (联考三day1/day2)

    szzq学长出的题,先orz一下. day1 倾斜的线 做过差不多的题,写在我自己的博客里,我却忘得一干二净,反而李巨记得清清楚楚我写了的. 题目就是要最小化这个东西 $|\frac{y_i-y_j} ...

  7. 张艾迪(创始人):出现在世界224C之前的这些时间

    出现在世界224C之前的这些时间 坐在大巴车上.用手塞住耳朵.繁杂的大巴车上.总会听见不喜欢听的声音.那时只有22.23岁的我.就像发明一些东西把所有不喜欢的声音都屏蔽掉.就像防火墙一样.那时候拥抱所 ...

  8. 张艾迪(创始人):发明整个世界+224C个国家

    Eidyzhang:发明整个世界+224C个国家 Eidyzhang: Genius.Founder.CEO.23 I 世界级最高级创始人.世界最高级FounderCEO 出生在亚洲中国.Eidyzh ...

  9. 2019年2月编程语言最新排行:java稳居第一(java优势在哪里)

      近日TIOBE公布了2月编程语言排名,在意料之中java稳居第一,C和C++分别位居第二第三名. 下图是2 月编程语言排行榜 TOP20 榜单以及前 10 名编程语言长期走势图:         ...

随机推荐

  1. Thrift0.11.0基于Intellij IDEA的简单的例子

    前言 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其中所用到的数据传输方式包括 XML,JSON 等,然 ...

  2. ehcache.xml详解

    <?xml version="1.0" encoding="UTF-8"?> <ehcache> <!-- Sets the pa ...

  3. 最小生成树 - 克鲁斯卡尔 - 并查集 - 边稀疏 - O(E * logE)

    #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<cstring> #include<algorithm ...

  4. Activiti工作流笔记(2)

    1.Activiti工作数据表 Activiti用来存放流程数据的表共使用23张表,表名都是以"ACT_"开头,底层操作默认使用mybatis操作 工作流Activiti的表是用来 ...

  5. gitlab永久设置密码

    在 .gitconfig 文件中加入: [credential]       helper = store .git-credentials close address

  6. PHP:第四章——PHP数组array_diff计算数组差集

    <pre> <?php header("Content-Type:text/html;charset=utf-8"); /*知识点一:array_diff — 计 ...

  7. UVALive 4764 dp

    DES: 这是一个新的游戏.给你一套牌.编号从1到100000.正常来说.你手中的牌和这次翻的牌是一样的,就会加一分.但是.如果是999的话.加三分.所以问你最大的分是多少. 貌似是简单的DP吧.(D ...

  8. Microsoft Office相关开发组件

    安装office,直接引用COM控件 C#4提供对PIA引用的一种方式:链接(编译器只会将PIA中需要的部分直接嵌入到程序集中),变体(variant)被视为动态类型,以减少强制转换需要的开销: 不安 ...

  9. ajax post提交空字符串(string.Empty) MVC接收为null的问题

    ajax post提交空字符串(string.Empty) MVC接收为null的问题 这个问题查了好多资料才知道原因: if (bindingContext.ModelMetadata.Conver ...

  10. poj3020 二分图匹配 最大独立集

    这是一道水题, 这里是最大流解法,之后再补 坑在又忘了反向建边了 题意:给你二维bool数组,让你求出能用多米诺骨牌覆盖所有 1 且骨牌最少的放法(因为多米诺骨牌1*2的结构方便描述,原题没有),原本 ...