Crane (POJ 2991)
2024-08-26 03:52:26
//线段树 延迟标签
//
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e4+5;
double x[maxn*4];
double y[maxn*4];
int degreen[maxn];
int d[maxn*4];//延迟标签
void rotate(int i,int num)
{
double ang=(1.0*num)/180*acos(-1);
double newx=x[i]*cos(ang)-y[i]*sin(ang);//向量逆时针转动后的x坐标;
double newy=x[i]*sin(ang)+y[i]*cos(ang);
x[i]=newx;
y[i]=newy;
}
void pushdown(int i)
{
d[i<<1]+=d[i];
d[i<<1|1]+=d[i];
rotate(i<<1,d[i]);
rotate(i<<1|1,d[i]);
d[i]=0;
}
void pushup(int i)
{
x[i]=x[i<<1]+x[i<<1|1];
y[i]=y[i<<1]+y[i<<1|1];
}
void build(int l,int r,int root)
{
d[root]=0;
if(l==r)
{
x[root]=0;
scanf("%lf",&y[root]);
return;
}
int mid=(l+r)>>1;
build(l,mid,root<<1);
build(mid+1,r,root<<1|1);
pushup(root);
}
void update(int index,int l,int r,int root,int ang)
{
if(l>=index)
{
rotate(root,ang);
d[root]+=ang;
return;
}
int mid=l+r>>1;
pushdown(root);
if(index<=mid)
update(index,l,mid,root<<1,ang);
update(index,mid+1,r,root<<1|1,ang);
pushup(root);
}
int main()
{
int n,c;
scanf("%d%d",&n,&c);
build(1,n,1);
for(int i = 1;i <= n;++i)
degreen[i]=180;
for(int i = 1;i <= c;++i)
{
int a,b;
scanf("%d%d",&a,&b);
update(a+1,1,n,1,b-degreen[a]);
degreen[a]=b;
printf("%.2lf %.2lf\n",x[1],y[1]);
}
return 0;
}
最新文章
- 介绍开源的.net通信框架NetworkComms框架 源码分析(五)ReservedPacketType
- iOS学习之Object-C语言内存管理高级
- 纯JS画点、画线、画圆的方法
- Java实现MySQL在线管理
- 关于Eclipse中的快捷键占用的解决.
- ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)
- asp.net 后台任务作业框架收集
- Structured-Streaming之窗口操作
- haproxy + keepalived 实现网站高可靠
- Android开发之漫漫长途 X——Android序列化
- Django学习-12-模板继承
- 利用ATiny85制作BadUSB
- 使用原生php爬取图片并保存到本地
- 广州.NET微软技术俱乐部 微信群有用信息集锦
- hdu-1728(贪心&;&;bfs的灵活运用吧)
- hdu3516 Tree Construction (区间dp+四边形优化)
- JDK7+EclipseIDE+Tomcat7.0.55++mybatis3+Maven3.2.2 构建webapp 的java 的maven项目
- mini-css-extract-plugin简介
- PHP中的urlencode,rawurlencode和JS中的encodeURI,encodeURIComponent
- ReentrantReadWriteLock源码分析(一)