博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【树状数组】Codeforces Round #755 D. PolandBall and Polygon
阅读量:6680 次
发布时间:2019-06-25

本文共 790 字,大约阅读时间需要 2 分钟。

http://codeforces.com/problemset/problem/755/D

每次新画一条对角线的时候,考虑其跨越了几条原有的对角线。

可以用树状数组区间修改点查询来维护多边形的顶点。答案每次增加 新对角线的左端点在多少个区间内+右端点在多少个区间内+1,每次把新画的对角线所覆盖的较小区间内部的每个点加1即可。注意,一定要是较小的区间,因为这样才能保证其左右端点不同时在区间内,不会重复统计。

#include
#include
using namespace std;typedef long long ll;int n,m;ll ans=1ll;int d[1000010];int Query(int p){int res=0; for(;p;p-=(p&(-p))) res+=d[p]; return res;}void add(int p,int v){for(;p<=n;p+=(p&(-p))) d[p]+=v;}void Update(int l,int r){ if(l
n/2) m=n-m; int U=1; for(int i=1;i<=n;++i) { int pre=U; U+=m; if(U>n) U-=n; ans+=((ll)Query(pre)); ans+=((ll)Query(U)+1ll); Update(pre,U); printf("%I64d%c",ans,i==n ? '\n' : ' '); } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/6291551.html

你可能感兴趣的文章
mac 使用“终端”远程登录 linux 主机
查看>>
avhttp终于支持了gzip/chunked
查看>>
《设计模式 系列》- 创建型模式 - 状态模式
查看>>
WebService之Axis2快速入门(4): 传输二进制文件
查看>>
subversion中去除不需要的目录
查看>>
Android内核开发:从源码树中删除出厂的app应用
查看>>
Node.js+Express商业开发中的安全性考虑
查看>>
Python 学习笔记 - 上下文
查看>>
linux技术手册
查看>>
jquery的验证formValidator
查看>>
poj 其他
查看>>
UNIX epoch -- 为什么UNIX的时间起始于1970.01.01
查看>>
推荐10个HTML5游戏网站
查看>>
ios中的动画
查看>>
在pcDuino实现AP–wifi热点共享
查看>>
mysql实时记录客户端提交的sql语句
查看>>
多线程学习笔记(五)
查看>>
pyspider爬虫学习-教程3-Render-with-PhantomJS.md
查看>>
107个常用Javascript语句
查看>>
关联表更新
查看>>