线段树 poj 2991
我们只要把这些向量求和,最终所指的位置就是终点,因此我们只要维护好向量的区间和就可以了。对于第二个问题,我们可以用一个数组degree[i]表示第i个向量和第i-1一个向量当前的夹角,这样就有了当前的状态,每次读入操作后就会方便的得到相当于进行旋转多少角度的操作了,然后再更新一下degree[i]即可。并且我们每读入一个操作只会影响一个degree[]的值,不会影响到其他的degree[]。
总而言之,我们要把每个线段看成一个向量,并维护这些向量的区间和,同时要实现对区间中每个元素都加上一个值这一操作。
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h> using namespace std; #define MAXN 10010
const double pi =acos(-1.0);
int z[MAXN],deg[MAXN],re[MAXN<<]; struct node
{
int l,r;
double x,y;
}x[MAXN<<];
double getrad(int a)
{
return a*pi/;
}
void Build(int l,int r,int a)
{
x[a].l=l;
x[a].r=r;
x[a].x=;
x[a].y=z[r]-z[l-];
re[a]=;
if(l==r)
return ;
int mid=(l+r)>>;
Build(l,mid,a<<);
Build(mid+,r,a<<|);
}
void Rotate(double &dx,double &dy,double rad)
{
double x=dx,y=dy;
dx=x*cos(rad)-y*sin(rad);
dy=x*sin(rad)+y*cos(rad);
}
void push_down(int a)
{
double rad=getrad(re[a]);
int ls=a<<,rs=a<<|;
if(re[a])
{
re[ls]+=re[a];
re[rs]+=re[a];
Rotate(x[ls].x,x[ls].y,rad);
Rotate(x[rs].x,x[rs].y,rad);
re[a]=;
}
}
void push_up(int a)
{
x[a].x=x[a<<].x+x[a<<|].x;
x[a].y=x[a<<].y+x[a<<|].y;
}
void update(int l,int r,int a1,int w,int a)
{
double rad=getrad(w);
if(l==r)
{
Rotate(x[a].x,x[a].y,rad);
return ;
}
push_down(a);
int mid=(l+r)>>;
if(mid<a1)
update(mid+,r,a1,w,a<<|);
else
{
update(l,mid,a1,w,a<<);
Rotate(x[a<<|].x,x[a<<|].y,rad);
re[a<<|]+=w;
}
push_up(a);
}
int main()
{
int n,m,ca=;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(ca!=)
printf("\n");
ca++;
for(int i=;i<=n;i++)
{
scanf("%d",&z[i]);
z[i]=z[i-]+z[i];
}
memset(deg,,sizeof(deg));
Build(,n,);
for(int i=;i<=m;i++)
{
int s,a;
scanf("%d%d",&s,&a);
s++;
a=a-;
int delta=a-deg[s];
deg[s]=a;
update(,n,s,delta,);
printf("%.2lf %.2lf\n",x[].x,x[].y);
}
} return ;
}
线段树 poj 2991的更多相关文章
- 离散化+线段树 POJ 3277 City Horizon
POJ 3277 City Horizon Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18466 Accepted: 507 ...
- 线段树 poj 1436
题目大意:给出n条垂直于x轴的线段的数据y1,y2,x,求出有几个三条线段一组的三元组并且他们兩兩能相见的.思路:对y轴建树,将x排序,然后按顺序边询问边擦入,用mark[i][j]表示j往左可以看到 ...
- [RMQ] [线段树] POJ 3368 Frequent Values
一句话,多次查询区间的众数的次数 注意多组数据!!!! RMQ方法: 预处理 i 及其之前相同的数的个数 再倒着预处理出 i 到不是与 a[i] 相等的位置之前的一个位置, 查询时分成相同的一段和不同 ...
- 线段树 poj 3468
Description You have N integers, A1, A2, ... ,AN. You need to deal with two kinds of operations. One ...
- 线段树 poj 3667
1-n线段 m个操作 1 a 是否可找到连续a个空位子 有输出最左边(然后使这一段被占)没有0 2 a ,b a~b区间变成未使用 #include<stdio.h> #include& ...
- POJ 2991 Crane(线段树+计算几何)
POJ 2991 Crane 题目链接 题意:给定一个垂直的挖掘机臂.有n段,如今每次操作能够旋转一个位置,把[s, s + 1]专程a度,每次旋转后要输出第n个位置的坐标 思路:线段树.把每一段当成 ...
- POJ 2991–Crane【线段树+几何】
题意: 把手臂都各自看成一个向量,则机械手的位置正好是手臂向量之和.旋转某个关节,其实就是把关节到机械手之间的手臂向量统统旋转. 由于手臂很多,要每个向量做相同的旋转操作很费时间.这时就可以想到用线段 ...
- (中等) 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 ...
随机推荐
- 谈谈iOS app的线上性能监测
在移动端开发者中最重要的KPI应该是崩溃率.当崩溃率稳定下来后,工作的重心就应该转移到性能优化上.那么问题来了,如果你的项目也没有接入任何性能监测SDK,没有量化的指标来衡量,那你说你优化了性能领导信 ...
- 环信SDK报错处理方法obtain an updated library from the vendor, or disable bitcode for this target. for archit
ld: '/Users/momo/Desktop/ThreeFingers/Pods/EaseMobSDKFull/EaseMobSDKFull/lib/libEaseMobClientSDK_arm ...
- 【代码笔记】iOS-获取系统完成任务所需的后台时间
一,代码. AppDelegate.h #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder <UIApplica ...
- iOS 陀螺仪,加速度计
atan2(x, y)反正切函数 x是对边 y临边 data.acceleration 加速度值,当手机水平放置时值为(0,0,-1),当手机竖直放置时值为(0,-1,0),判断手机拿起状态可以 ...
- Gui系统之View体系(2)---View的setContent
1.从SetContentView讲起 1.1Activty的setContentView里面的内容 public void setContentView(@LayoutRes int layoutR ...
- Ubuntu如何选择更新源
刚装上Ubuntu, 决定先更新一下源. 虽然网上搜索提供了很多更新源,结果替换上实际使用的时候,却发现总是有404无法连接的情况. 后来查查资料,发现Ubuntu自己就提供了很多的源管理. 具体更新 ...
- MS SQL专用管理员连接DAC
在SQL SERVER 2005中,微软引入了一个叫做数据库专用管理员连接方式(DAC Dedicated Administrator Connection)的特性,使用这个新特性,数据库管理员可以在 ...
- VIEW SERVER STATE permission was denied on object 'server', database 'master'
今天一同事反馈使用SQL Server 2012 Management Studio连接SQL Server 2014后,选择数据库中某个表,然后单击右键时,就会遇到下面错误: 这个错误初看以为是权限 ...
- Android:使用代理服务器安装SDKs
在使用Android SDK Manager来安装SDK时,因为google的ip被墙了,所以下载文件时,下载不到. 面对不能访问google的问题,通常有下列方案: 1)修改hosts文件,需要有正 ...
- 【hive】——metastore的三种模式
Hive中metastore(元数据存储)的三种方式: 内嵌Derby方式 Local方式 Remote方式 [一].内嵌Derby方式 这个是Hive默认的启动模式,一般用于单元测试,这种存储方式有 ...