题目大意:

给定n条首尾相接的线段的长度

第一条从0,0开始,所有线段垂直与x轴向上延伸

给定c次操作 每次操作给定 s,a

使得 由第s条线段的角度 逆时针旋转a后 达到第s+1条线段的角度

每次操作后输出最后一条线段末尾端点的坐标

向量逆时针旋转公式为

x' = x * cos(A) - y * sin(A); y' = x * sin(A) + y * cos(A);

一个向量  (x,y)  可分解两个向量为 垂直于y轴的(x,0) 和垂直于x轴的 (0,y)

两个分向量逆时针A度后

(x',0) = ( x*coa(A),x*sin(A) )   (0,y') = ( -y*sin(A),y*cos(A) )

两个旋转后的分向量 再合并就可得到旋转后的 (x',y')

用线段树维护一段区间内由 该区间内第一段线段的起点 指向 最后一段线段的末尾的向量

每次操作更新区间时 我们只对 操作位置处于当前区间的左子区间 的区间更新

那么这样当更新一段区间时 当前向量=左子区间的向量+右子区间旋转后的的向量

并且对于区间长度为1的区间不做处理

#include <bits/stdc++.h>
using namespace std;
const double PI=acos(-1.0);
const int N=; int n,c,L[N];
double pre[N]; double angT[N<<];
double x[N<<],y[N<<]; void build(int k,int l,int r) {
angT[k]=x[k]=0.0;
if(r==l) y[k]=L[l];
else {
int lson=k*, rson=k*+;
int m=(l+r)/;
build(lson,l,m);
build(rson,m+,r);
y[k]=y[lson]+y[rson];
}
}
void change(int s,double ang,int k,int l,int r) {
if(s<l || l==r) return; // 操作位置不在范围内 或 区间长度为1 不作处理
else if(s<=r) {
int lson=k*, rson=k*+;
int m=(l+r)/;
change(s,ang,lson,l,m);
change(s,ang,rson,m+,r); // 先处理左右子区间
if(s<=m) angT[k]+=ang; // 操作位置位于区间的左子区间内 可根据左右子区间的向量更新 double sina=sin(angT[k]), cosa=cos(angT[k]);
x[k]=x[lson]+(x[rson]*cosa-y[rson]*sina);
y[k]=y[lson]+(x[rson]*sina+y[rson]*cosa);
}
} int main()
{
while(~scanf("%d%d",&n,&c)) {
for(int i=;i<=n;i++) {
scanf("%d",&L[i]);
pre[i]=PI;
}
build(,,n);
while(c--) {
int s,a; scanf("%d%d",&s,&a);
double ang=(double)a/180.0*PI;
change(s,ang-pre[s],,,n);
pre[s]=ang; // 要求改变为a度 考虑之前已改变过
printf("%.2f %.2f\n",x[],y[]);
}
printf("\n");
} return ;
}

Crane /// 向量旋转+线段树的更多相关文章

  1. 【BZOJ4311】向量(线段树分治,斜率优化)

    [BZOJ4311]向量(线段树分治,斜率优化) 题面 BZOJ 题解 先考虑对于给定的向量集,如何求解和当前向量的最大内积. 设当前向量\((x,y)\),有两个不同的向量\((u1,v1),(u2 ...

  2. BZOJ 3533: [Sdoi2014]向量集( 线段树 + 三分 )

    答案一定是在凸壳上的(y>0上凸壳, y<0下凸壳). 线段树维护, 至多N次询问, 每次询问影响O(logN)数量级的线段树结点, 每个结点O(logN)暴力建凸壳, 然后O(logN) ...

  3. 2019.02.26 bzoj4311: 向量(线段树分治+凸包)

    传送门 题意: 支持插入一个向量,删去某一个现有的向量,查询现有的所有向量与给出的一个向量的点积的最大值. 思路: 考虑线段树分治. 先对于每个向量处理出其有效时间放到线段树上面,然后考虑查询:对于两 ...

  4. BZOJ3533:[SDOI2014]向量集(线段树,三分,凸包)

    Description 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); " Q x y l r (| ...

  5. 【bzoj3533】[Sdoi2014]向量集 线段树+STL-vector维护凸包

    题目描述 维护一个向量集合,在线支持以下操作:"A x y (|x|,|y| < =10^8)":加入向量(x,y);"Q x y l r (|x|,|y| < ...

  6. [SDOI2014][BZOJ3533] 向量集 [线段树+凸包]

    题面 BZOJ传送门 思路 首先当然是推式子 对于一个询问点$(x_0,y_0$和给定向量$(x_1,y_1)$来说,点积这么表达: $A=x_0x_1+y_0y_1$ 首先肯定是考虑大小关系:$x_ ...

  7. bzoj 3533: [Sdoi2014]向量集 线段树维护凸包

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3533 题解: 首先我们把这些向量都平移到原点.这样我们就发现: 对于每次询问所得到的an ...

  8. bzoj 3533 [Sdoi2014]向量集 线段树+凸包+三分(+动态开数组) 好题

    题目大意 维护一个向量集合,在线支持以下操作: "A x y (|x|,|y| < =10^8)":加入向量(x,y); "Q x y l r (|x|,|y| & ...

  9. BZOJ_4311_向量_线段树按时间分治

    BZOJ_4311_向量_CDQ分治+线段树按时间分治 Description 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y) ...

随机推荐

  1. web跨域问题解决方案

    在前端开发及调试过程中总能遇到浏览器报如下错误: Response to preflight request doesn't pass access control check: No 'Access ...

  2. thinkphp5.1调用七牛云SDK上传文件

    thinkphp5.0 class Upload { public static function image(){ if(empty($_FILES['file']['tmp_name'])){ e ...

  3. CSS:CSS 媒体类型

    ylbtech-CSS:CSS 媒体类型 1.返回顶部 1. CSS 媒体类型 媒体类型允许你指定文件将如何在不同媒体呈现.该文件可以以不同的方式显示在屏幕上,在纸张上,或听觉浏览器等等. 媒体类型 ...

  4. Redis和SpringBoot整合RedisUtils类

    一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  5. 【Java多线程系列二】Thread类的方法

    Thread实现Runnable接口并实现了大量实用的方法. /* * 此方法释放CPU,但并不释放已获得的锁,其它就绪的线程将可能得到执行机会,它自己也有可能再次得到执行机会 */ public s ...

  6. Linux环境变量永久设置方法(zsh)

    1.之前一直使用:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./home/46005/cuda-9.0/lib64/来设置cuda库路径变量 -----临时的,当 ...

  7. linux 服务器修改密码

    登录服务器后直接输入命令行passwd root 然后输入两次新密码就行

  8. swiper实现上下滑动翻页,内置内容页也滚动

    如果我猜的没错,是全网(哈哈)比较少的成功解决方案,如需要转载,请声明并转载出处. swiper实现了上下滑动翻页,但是有几个页面的内容显示不完.如果一页显示不完时可以滑动查看,应该怎么做?这个是我多 ...

  9. 深入理解JAVA虚拟机原理之内存分配策略(二)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 1.对象优先在Eden分配 大多情况,对象在新生代Eden区分配.当Eden区没 ...

  10. D3.js绘制 颜色:RGB、HSL和插值 (V3版本)

    颜色和插值   计算机中的颜色,常用的标准有RGB和HSL.   RGB:色彩模式是通过对红(Red).绿(Green).蓝(Blue)三个颜色通道相互叠加来得到额各式各样的颜色.三个通道的值得范围都 ...