https://www.luogu.org/problem/P5524

看着能做就当线段树复健题了。

根据高中知识我们有

$sin(a+b)=sin(a)cos(b)+cos(a)sin(b)$

$cos(a+b)=cos(a)cos(b)-sin(a)sin(b)$

那这题只需要维护区间$sin$和与$cos$和的线段树就好了,完后区间加的更新方法如上。

但是比较卡常,建议标记永久化,并且减少求$sincos$的次数。(反正我开O2过了就不管了233)

~~我真的是连线段树都不会敲了我乱push结果RE了debug了半天,难受555~~

#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef double dl;
const int N=2e5+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct tree{
dl s,c;
ll w;
}tr[N<<];
int b[N];
inline void pushup(int a){
tr[a].s=tr[a<<].s+tr[a<<|].s;
tr[a].c=tr[a<<].c+tr[a<<|].c;
return;
}
inline void upd(int a,dl S,dl C){
dl s=tr[a].s,c=tr[a].c;
tr[a].s=s*C+c*S;
tr[a].c=c*C-s*S;
return;
}
inline void pushdown(int a){
if(!tr[a].w)return;
dl s=sin(tr[a].w),c=cos(tr[a].w);
upd(a<<,s,c);upd(a<<|,s,c);
tr[a<<].w+=tr[a].w;tr[a<<|].w+=tr[a].w;
tr[a].w=;return;
}
void build(int a,int l,int r){
if(l==r){
tr[a].s=sin(b[l]);tr[a].c=cos(b[l]);return;
}
int mid=(l+r)>>;
build(a<<,l,mid);build(a<<|,mid+,r);
pushup(a);
}
void add(int a,int l,int r,int l1,int r1,int v){
if(r<l1||r1<l)return;
if(l1<=l&&r<=r1){
upd(a,sin(v),cos(v));tr[a].w+=v;return;
}
int mid=(l+r)>>;pushdown(a);
add(a<<,l,mid,l1,r1,v);add(a<<|,mid+,r,l1,r1,v);
pushup(a);
}
dl qry(int a,int l,int r,int l1,int r1){
if(r<l1||r1<l)return ;
if(l1<=l&&r<=r1)return tr[a].s;
int mid=(l+r)>>;pushdown(a);
return qry(a<<,l,mid,l1,r1)+qry(a<<|,mid+,r,l1,r1);
}
int main(){
int n=read();
for(int i=;i<=n;i++)b[i]=read();
build(,,n);
int m=read();
while(m--){
int op=read(),l=read(),r=read();
if(op==){
int v=read();
add(,,n,l,r,v);
}else printf("%.1lf\n",qry(,,n,l,r));
}
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

洛谷P5524:[Ynoi2012]D1T1——题解的更多相关文章

  1. 洛谷P2832 行路难 分析+题解代码【玄学最短路】

    洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...

  2. 【洛谷P3960】列队题解

    [洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...

  3. 洛谷P2312 解方程题解

    洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...

  4. 洛谷P1577 切绳子题解

    洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...

  5. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  6. 洛谷 P1220 关路灯 题解

    Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...

  7. 【洛谷P3410】拍照题解(最大权闭合子图总结)

    题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...

  8. [BZOJ 3039&洛谷P4147]玉蟾宫 题解(单调栈)

    [BZOJ 3039&洛谷P4147]玉蟾宫 Description 有一天,小猫rainbow和freda来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. ...

  9. 洛谷 P3695 CYaRon!语 题解 【模拟】【字符串】

    大模拟好啊! 万一远古计算机让我写个解释器还真是得爆零了呢. 题目背景 「千歌です」(我是千歌).「曜です」(我是曜).「ルビィです」(我是露比).「3人合わせて.We are CYaRon! よろし ...

  10. 洛谷P5364 [SNOI2017]礼物 题解

    传送门 /* 热情好客的小猴子请森林中的朋友们吃饭,他的朋友被编号为 1∼N,每个到来的朋友都会带给他一些礼物:大香蕉.其中,第一个朋友会带给他 11 个大香蕉,之后,每一个朋友到来以后,都会带给他之 ...

随机推荐

  1. vue开发相关问题以及解决方案

    1.使用ref获取到dom元素,但是无法获取到dom元素的样式? 给div盒子加上<div ref="remove">, 在控制台打印为undefined. 此时我们打 ...

  2. qt 子窗口内嵌到父窗口

    类声明 动态申请子窗口类对象 ClassA *a = new ClassA(this); 隐藏边框 a->setWindowFlags(Qt::CustomizeWindowHint|Qt::F ...

  3. logger(一)slf4j简介及其实现原理

    一.slf4j简介 slf4j(Simple logging facade for Java)是对所有日志框架制定的一种规范.标准.接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体 ...

  4. django framework插件使用1

    安装 REST框架要求以下内容: Python(3.5.3.6.3.7) Django(1.11.2.0.2.1.2.2) pip install djangorestframework pip in ...

  5. Linux使用pt-archiver工具自动备份MySQL

    操作系统: CentOS 6.9 脚本语言: shell https://github.com/iscongyang/Practical/blob/master/shell-scripts/pt-ar ...

  6. Git问题

    1. LF will be replaced by CRLF rm -rf .git // 删除.git git config --global core.autocrlf false //禁用自动转 ...

  7. spring boot 程序启动缓慢的问题(二)

    今天发现一台服务器上的springboot程序启动特别慢,完全启动起来用了有好几分钟.刚开始以为是代码写的有问题造成了卡死,直到看到这条log: 2017-03-08 10:06:49.600 INF ...

  8. Python面试题(2)

    1.一行代码实现1-100的和 ? 1 2 3 print(sum(range(1,101))) #range中的参数是1<=i<101 #sum是计算参数的和 2.在函数内部改变全局变量 ...

  9. SIFT和SURF特征(草稿)

    (草稿) https://www.cnblogs.com/gavanwanggw/p/7073905.html

  10. 01-linux-基本语法-sh文件

    在一些开源库中,往往有一个 xxx.sh 的安装文件.命令“./ xxx.sh” 就可运行之. 其实内部是一些 linux 的语句.整合起来,方便使用而已. 介绍一下常用的一些Linux语句 cd b ...