POJ 2991 Crane
线段树+计算几何,区间更新,区间求和,向量旋转。
/* ***********************************************
Author :Zhou Zhentao
Email :774388357@qq.com
Created Time :2015/11/27 9:58:30
File Name :main.cpp
************************************************ */ #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std; const int maxn=+;
const double pi= acos(-1.0);
struct SegTree
{
double SumX,SumY;//记录向量
int add;//延迟更新的标记,记录角度转变量
}st[maxn*];
int f[maxn];
int N,Q; double H(double x)
{
return x*pi/180.0;
} void Rot(int rt,double A)
{
double NewX,NewY;
NewX=st[rt].SumX*cos(H(A))-st[rt].SumY*sin(H(A));
NewY=st[rt].SumX*sin(H(A))+st[rt].SumY*cos(H(A));
st[rt].SumX=NewX;
st[rt].SumY=NewY;
} void pushUp(int rt)
{
st[rt].SumX=st[rt*].SumX+st[rt*+].SumX;
st[rt].SumY=st[rt*].SumY+st[rt*+].SumY;
} void pushDown(int rt)
{
if(st[rt].add)
{
st[*rt].add+=st[rt].add;
st[*rt+].add+=st[rt].add;
Rot(*rt,(double)st[rt].add);
Rot(*rt+,(double)st[rt].add);
st[rt].add=;
}
} void build(int l,int r,int rt)
{
st[rt].add=;
if(l==r)
{
scanf("%lf",&st[rt].SumY);
st[rt].SumX=;
return;
}
int m=(l+r)/;
build(l,m,*rt);
build(m+,r,*rt+);
pushUp(rt);
} void update(int L,int R,int add,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
st[rt].add+=add;
Rot(rt,(double)add);
return;
} pushDown(rt);
int m=(l+r)/;
if(L<=m) update(L,R,add,l,m,*rt);
if(R>=m+) update(L,R,add,m+,r,*rt+);
pushUp(rt);
} int main()
{ int tot=;
while(~scanf("%d%d",&N,&Q))
{
if(tot) printf("\n");tot=; build(,N,); for(int i=;i<=N;i++) f[i]=; for(int i=;i<=Q;i++)
{
int x;int y;
scanf("%d%d",&x,&y);
int A=y-f[x];
update(x+,N,A,,N,);
f[x]=y; printf("%.2lf %.2lf\n",st[].SumX,st[].SumY);
}
}
return ;
}
POJ 2991 Crane的更多相关文章
- POJ 2991 Crane(线段树+计算几何)
POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...
- (中等) POJ 2991 Crane , 几何+线段树。
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- POJ 2991 Crane(线段树)
Crane Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7687 Accepted: 2075 Special J ...
- POJ 2991 Crane (线段树)
题目链接 Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of v ...
- POJ - 2991 Crane (段树+计算几何)
Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of variou ...
- POJ 2991–Crane【线段树+几何】
题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...
- [poj 2991]Crane[线段树表示向量之和,而非数量]
题意: 起重机的机械臂, 由n段组成, 对某一些连接点进行旋转, 询问每次操作后的末端坐标. 思路: 由于旋转会影响到该点之后所有线段的角度, 因此容易想到用线段树记录角度, 成段更新. (但是不是每 ...
- AC日记——Crane poj 2991
POJ - 2991 思路: 向量旋转: 代码: #include <cmath> #include <cstdio> #include <cstring> #in ...
- Crane (POJ 2991)
//线段树 延迟标签 // #include <bits/stdc++.h> using namespace std; const int maxn=1e4+5; double x[max ...
随机推荐
- 第十六节,基本数据类型,字典dict
字典 常用操作: 索引 新增 删除 键.值.键值对 循环 长度 字典由键值对组成,由一个键(名称)和 一个值组成,与列表和元组不同的是里面的元素是有键的(名称) 所以当要打印字典时,打印字典变量加[键 ...
- 在Linux服务器上增加硬盘没那么简单【转】
运维案例:HP服务器,LINUX系统在保障数据的前提下扩展/home分区 部门需求:研发部门提出需要在现有的服务器上扩容磁盘空间,以满足开发环境的磁盘需求.现有空间1.6T需要增加到2T. 需求调查分 ...
- device-mapper: multipath: Failing path recovery【转载】
digoal 2016-04-05 10:09:42 浏览180 评论0 摘要: 由于扇区损坏导致多路径设备failed. 现象如下 : # dmesg : device-mapper: mul ...
- 上传下载文件, 同时部署在webapps下, 而不是项目下,防止重新部署tomcat, 上传文件消失
前端上传 <a href='javascript:upload("+data[i].id+")' title='Upload Report'> <img src= ...
- Ajax+Spring MVC实现跨域请求(JSONP)JSONP 跨域
JSONP原理及实现 接下来,来实际模拟一个跨域请求的解决方案.后端为Spring MVC架构的,前端则通过Ajax进行跨域访问. 1.首先客户端需要注册一个callback(服务端通过该callba ...
- LinuxIP地址、网卡相关、克隆、VM
改IP地址(#setup) 1.输入vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.里面的内容修改为 DEVICE=eth0HWADDR=FC:4D:D4 ...
- minicom 不能输入
minicom -s 进入设置界面 在 Serial port setup 中设置 硬件控制流为NO F - Hardware Flow Control : No 就OK了
- go mode
https://github.com/dominikh/go-mode.el http://blog.altoros.com/golang-part-1-main-concepts-and-proje ...
- Java学习笔记之自定义异常
1.自定义异常类: /** * 自定义异常,只要继承继承Exception类或其子类即可 * @author Administrator * */ public class FileException ...
- Android OpenGL ES(七)基本几何图形定义 .
在前面Android OpenGL ES(六):创建实例应用OpenGLDemos程序框架 我们创建了示例程序的基本框架,并提供了一个“Hello World”示例,将屏幕显示为红色. 本例介绍Ope ...