题目链接:https://codeforces.com/gym/101908/problem/C

题意:

一块正方形披萨,有 $H$ 刀是横切的,$V$ 刀是竖切的,不存在大于等于三条直线交于一点。求最后切出多少片披萨。

题解:

横切和竖切分开考虑,如果横切的直线之间有 $ans_1$ 个交点,竖切的直线之间有 $ans_2$ 个交点,那么最后答案就是 $(H+1)(V+1)+ans_1+ans_2$。

这里求交点个数,是用的一种比较常见的树状数组优化的套路。

还有就是时限比较紧,用vector做离散化被卡了,改用数组就好了。

AC代码:

#include<bits/stdc++.h>
#define mk make_pair
#define fi first
#define se second
#define pb push_back
using namespace std;
typedef long long ll;
const int maxn=1e5+; int X,Y;
int H,V; int v[*maxn],tot;
inline int getID(int x)
{
return lower_bound(v,v+tot,x)-v+;
} struct Line{
int l,r;
bool operator<(const Line& o)const {
return l>o.l;
}
}lines[maxn]; struct _BIT{
int N,C[*maxn];
inline int lowbit(int x){return x&(-x);}
void init(int n) //初始化共有n个点
{
N=n;
for(int i=;i<=N;i++) C[i]=;
}
void add(int pos,int val) //在pos点加上val
{
while(pos<=N)
{
C[pos]+=val;
pos+=lowbit(pos);
}
}
int ask(int pos) //查询1~pos点的和
{
int ret=;
while(pos>)
{
ret+=C[pos];
pos-=lowbit(pos);
}
return ret;
}
}BIT; ll solve(int UP)
{
BIT.init(tot+);
ll res=;
for(int i=;i<=UP;i++)
{
res+=(ll)BIT.ask(lines[i].r-);
BIT.add(lines[i].r,);
}
return res;
} int main()
{
scanf("%d%d%d%d",&X,&Y,&H,&V); tot=;
for(int i=;i<=H;++i)
{
scanf("%d%d",&lines[i].l,&lines[i].r);
v[tot++]=lines[i].l;
v[tot++]=lines[i].r;
}
sort(v,v+tot); unique(v,v+tot);
for(int i=;i<=H;i++) lines[i].l=getID(lines[i].l), lines[i].r=getID(lines[i].r);
sort(lines+,lines+H+);
ll ans1=solve(H); tot=;
for(int i=;i<=V;i++)
{
scanf("%d%d",&lines[i].l,&lines[i].r);
v[tot++]=lines[i].l;
v[tot++]=lines[i].r;
}
sort(v,v+tot); unique(v,v+tot);
for(int i=;i<=V;i++) lines[i].l=getID(lines[i].l), lines[i].r=getID(lines[i].r);
sort(lines+,lines+V+);
ll ans2=solve(V); printf("%I64d\n",((ll)H+1LL)*((ll)V+1LL)+ans1+ans2);
}

Gym 101908C - Pizza Cutter - [树状数组]的更多相关文章

  1. Gym 100960G (set+树状数组)

    Problem Youngling Tournament 题目大意 给一个序列a[i],每次操作可以更改一个数,每次询问 将序列排序后有多少个数a[i]>=sum[i-1]. n<=10^ ...

  2. Gym 100463A Crossings (树状数组 逆序对)

    Crossings Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463 Description ...

  3. gym 102082G BZOJ4240 贪心+树状数组

    4240: 有趣的家庭菜园 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 756  Solved: 349[Submit][Status][Discu ...

  4. Codeforces Gym 100114 H. Milestones 离线树状数组

    H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...

  5. Codeforces Gym 100269F Flight Boarding Optimization 树状数组维护dp

    Flight Boarding Optimization 题目连接: http://codeforces.com/gym/100269/attachments Description Peter is ...

  6. Gym - 101755G Underpalindromity (树状数组)

    Let us call underpalindromity of array b of length k the minimal number of times one need to increme ...

  7. Gym - 100269F Flight Boarding Optimization(dp+树状数组)

    原题链接 题意: 现在有n个人,s个位置和你可以划分长k个区域你可以把s个位置划分成k个区域,这样每个人坐下你的代价是该区域内,在你之前比你小的人的数量问你怎么划分这s个位置(当然,每个区域必须是连续 ...

  8. 【容斥原理】【推导】【树状数组】Gym - 101485G - Guessing Camels

    题意:给你三个1~n的排列a,b,c,问你在 (i,j)(1<=i<=n,1<=j<=n,i≠j),有多少个有序实数对(i,j)满足在三个排列中,i都在j的前面. 暴力求的话是 ...

  9. Codeforces Gym 101142 G Gangsters in Central City (lca+dfs序+树状数组+set)

    题意: 树的根节点为水源,编号为 1 .给定编号为 2, 3, 4, …, n 的点的父节点.已知只有叶子节点都是房子. 有 q 个操作,每个操作可以是下列两者之一: + v ,表示编号为 v 的房子 ...

随机推荐

  1. 有趣的F-String

    F-String 让人上瘾 一个工具脚本的例子 https://www.pydanny.com/python-f-string-are-fun.html 在Python3.6的发布中,我们看到他们采纳 ...

  2. 027_git添加多账号设置

    一. 注意事项: (1)公钥文件权限设置问题 现象: Permissions 0644 for '/Users/arunyang/.ssh/id_rsa_ele_me.pub' are too ope ...

  3. Haystack-全文搜索框架

    Haystack 1.什么是Haystack Haystack是django的开源全文搜索框架(全文检索不同于特定字段的模糊查询,使用全文检索的效率更高 ),该框架支持Solr,Elasticsear ...

  4. Flask开发微电影网站(十)

    1.后台管理之角色管理 1.1 角色管理之定义角色表单 在app的admin目录的forms.py文件中,定义角色表单 # 角色表单 class RoleForm(FlaskForm): name = ...

  5. Jupyter Notebook启动不会自动打开浏览器,每次都要自己打开浏览器输入网址

    今天在使用jupyter 时,已启动服务,但每次都需要手动去浏览器 输入网址才可以, 最好找了好久才解决了. 去cmd 命令窗口执行jupyter notebook --generate-config ...

  6. 纯css画直角三角形

    所有的三角形,都是通过盒子模型来设定. border(边框)的不同大小来决定 border-width: 边框的宽度 border-style: 边框的样式 border-color: 边框的颜色 1 ...

  7. 期货大赛项目|九,fileinput插件的应用

    引入JS和CSS bundles.Add(new ScriptBundle("~/bundles/fileinputJs").Include( "~/Content/ve ...

  8. celery使用

    1.常用命令 (1)启动后台职程 celery worker -A tasks --loglevel=info celery worker -A tasks --loglevel= -A 是指cele ...

  9. Doctirne---查询更新等操作

    使用Doctrine进行mysql更删改查操作,事务处理,生命周期的管理 1.先记录最简单的插入操作 $em = $this->getDoctrine()->getManager(); / ...

  10. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(◍°∇°◍) ...