poj2991 Crane
思路:
线段树每个节点维护第一条线段起点指向最后一条线段终点的向量,于是每一个操作都是一次区间更新。使用成段更新的线段树即可。
实现:
#include <cstdio>
#include <iostream>
#include <cmath>
#include <cstring> using namespace std; const int MAXN = ;
const double PI = acos(-1.0); int a[MAXN], d[MAXN], n, c;
struct node
{
double x, y;
int lazy;
};
node tree[MAXN << ];
double trans(int d) { return (double)d * PI / 180.0; }
void rotate(double & x, double & y, int dx)
{
double tx = x * cos(trans(dx)) - y * sin(trans(dx));
double ty = y * cos(trans(dx)) + x * sin(trans(dx));
x = tx; y = ty;
}
void pushdown(int num)
{
if (!tree[num].lazy) return;
int tmp = tree[num].lazy;
rotate(tree[num << ].x, tree[num << ].y, tmp);
rotate(tree[num << | ].x, tree[num << | ].y, tmp);
tree[num << ].lazy += tmp;
tree[num << | ].lazy += tmp;
tree[num].lazy = ;
}
void pushup(int num)
{
tree[num].x = tree[num << ].x + tree[num << | ].x;
tree[num].y = tree[num << ].y + tree[num << | ].y;
}
void build(int num, int l, int r)
{
if (l == r) { tree[num].y = a[r]; return; }
int m = l + r >> ;
build(num << , l, m);
build(num << | , m + , r);
pushup(num);
}
void update(int num, int l, int r, int x, int y, int dx)
{
if (x <= l && y >= r)
{
rotate(tree[num].x, tree[num].y, dx);
tree[num].lazy += dx;
return;
}
int m = l + r >> ;
pushdown(num);
if (x <= m) update(num << , l, m, x, y, dx);
if (y >= m + ) update(num << | , m + , r, x, y, dx);
pushup(num);
} int main()
{
while (scanf("%d %d", &n, &c) != EOF)
{
for (int i = ; i <= n * ; i++) { tree[i].x = tree[i].y = ; tree[i].lazy = ; }
for (int i = ; i <= n; i++) scanf("%d", &a[i]);
for (int i = ; i < n; i++) d[i] = ;
build(, , n);
int x, y;
for (int i = ; i < c; i++)
{
scanf("%d %d", &x, &y);
int dx = y - d[x];
d[x] = y;
update(, , n, x + , n, dx);
printf("%.2f %.2f\n", tree[].x, tree[].y);
}
puts("");
}
return ;
}
poj2991 Crane的更多相关文章
- poj2991 Crane(线段树)
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- POJ-2991 Crane(区间更新+向量旋转)
题目大意:n个向量首尾相连,每次操作使某个区间中的所有向量都旋转同样的角度.每次操作后都回答最后一个向量的坐标. 题目分析:区间维护向量信息.向量旋转:x1=x0*cos(t)-y0*sin(t),y ...
- poj2991 Crane(线段树+集合)白书例题
题目大意:起重机有n节,题目给出要调节的k节,每节调节成x度,求最后底部的起重机的坐标(最顶上的起点为(0,0)). 分析:一开始我看白书,看不懂他那个向量旋转的坐标是怎么来的,翻了很多博客,才发现, ...
- 线段树总结 (转载 里面有扫描线类 还有NotOnlySuccess线段树大神的地址)
转载自:http://blog.csdn.net/shiqi_614/article/details/8228102 之前做了些线段树相关的题目,开学一段时间后,想着把它整理下,完成了大牛NotOnl ...
- [转载]完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...
- 【转】线段树完全版~by NotOnlySuccess
线段树完全版 ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...
- 《完全版线段树》——notonlysuccess
转载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文 ...
- 【转】 线段树完全版 ~by NotOnlySuccess
载自:NotOnlySuccess的博客 [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章 ...
- 【转载】完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ 今晚上比赛就考到了 排兵布阵啊,难受. [完全版]线段树 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时 ...
随机推荐
- JavaSE入门学习23:Java面向对象之构造方法
学了JavaSE面向对象这一部分,也该对构造方法做一个总结了. 一构造方法 在多数情况下,初始化一个对象的终于步骤是去调用这个对象的构造方法. 构造方法负责对象的初始化工作,为 实例变量赋予合适的初始 ...
- 2016/05/10 thinkphp 3.2.2 ①系统常量信息 ②跨控制器调用 ③连接数据库配置及Model数据模型层 ④数据查询
[系统常量信息] 获取系统常量信息: 如果加参数true,会分组显示: 显示如下: [跨控制器调用] 一个控制器在执行的时候,可以实例化另外一个控制,并通过对象访问其指定方法. 跨控制器调用可以节省我 ...
- 磁盘扩容 磁盘阵列(Redundant Arrays of Independent Disks,RAID)
磁盘阵列(Redundant Arrays of Independent Disks,RAID) 云 500G 不够用 扩容 方案1 重建分区,由500G到1T,按历史增速,1年后再扩到1.5T, ...
- HR-部门内部调动报表
*&---------------------------------------------------------------------* *& Report ZHRPA038 ...
- 在Orchard CMS Theme 用代码定义布局Widgets 配置
在上篇中主要详细的叙述了代码的编写,这一篇主要讲解配置.可能有人会有疑问,在上一篇的代码里只有对数据的展示部分的编写,并没有提供数据源.这就是Orchard的强大之处,数据源是通过在后台配置的,那有人 ...
- action 与 action 之间的跳转
这个要看你的两个action是不是在通一个package下了 <!-- 相同package下调用其它action --><action name="loginUser&qu ...
- 网页动画插件---Super Scrollorama , TweenMax 和skrollr
SuperScrollorama 是一个用来实现超酷的滚动动画效果的 jQuery 插件. 实现的效果有:文字褪色,飞,旋转,缩放,斯马什,针脚,滑动,隐退,反弹,颜色,扔,移动,视差. 地址:htt ...
- 【基于libRTMP的流媒体直播之 AAC、H264 解析】
前文我们说到如何在基于 libRTMP 库的流媒体直播过程中推送 AAC .H264 音视频流.本文以上文为基础,阐释如何对 RTMP 包进行解析.重组得到原始的 AAC 音频帧以及 H264 码流. ...
- 276D
贪心 想了一会觉得没什么很好的方法,看了题解 我们枚举每个二进制位,对于l,r如果这位相同就异或到答案里,否则停止,这里肯定是r比l大,也就是r这位是1而l是0,那么我们就让r这位选1,l选0,然后把 ...
- js函数定义 参数只要写名称就可以了
js函数定义 参数只要写名称就可以了 以下为标准: function add(type) { } 不要写成下面这个样子 function add(var type) { } 哎 妹的 老何ja ...