线段树 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 ...
随机推荐
- Google C++单元测试框架GoogleTest---Extending Google Test by Handling Test Events
Google TestExtending Google Test by Handling Test Events Google测试提供了一个事件侦听器API,让您接收有关测试程序进度和测试失败的通知. ...
- xcode8打包ipa文件, application loader上传成功,但是iTunes Connect不显示构建版本
最近更新的Xcode8.今天提交新项目时.按照以往的流程走 Xcode 编译ipa文件.applicaiton loader提交成功 但是.iTunes connect构建版本不显示.非常疑惑.平时等 ...
- android-async-http AsyncHttpClient介绍
前一阵子刚搬了家,加上公司要发新版本,所以一直比较忙,文章也好几周没更新了.难得这个周末有空,正好周内偶然间闲逛 发现这个很不错的第三方开源类库,针对Android开发中发送http请求的. 在And ...
- python之很好的网站
1.python官方开发者文档查询和python下载网站 2.
- JS实现HTML标签转义及反转义
今天我用ueditor时候遇到一个问题: 我从数据库中读取内容进行编辑的时候,不是有一些html标签嘛,从数据库读出来没有问题: 但是我用asp.net mvc,把读取出来的内容通过ueditor的a ...
- ORA-19502: write error on file "xxxxx", block number xxxx
错误现象: 在ORACLE 10g下为表空间IGNITE_EGVSQL01增加数据文件时,报如下错误: SQL> ALTER TABLESPACE IGNITE_EGVSQL01 AD ...
- RedHat 4下无resize2fs命令
在Red Hat Enterprise Linux AS release 4上进行LVM扩展分区时,发现RedHat 4下没有resize2fs,不过可以用ext2online替换resize2fs. ...
- IO redirect
在OS中,每启动一个进程,就自动的分配了三个流到进程中. [0:标准输入流,即键盘输入].[1:标准输出流,输出到显示器].[2:错误输出流,输出到显示器],其余的还未指定. 基本IO操作 cmd & ...
- shell统计指定范围内的所有质数以及它们的和
#!bin/bash a= $) ;do n= $x);do ];then n=$[$n+] fi done ];then { echo -n -e "$x\t" sum=$[$s ...
- C++的友元类和友元函数实例
#include <math.h> #include<iostream> using namespace std; class Point { public: Point(do ...