p.s. 复合函数求导时千万不能先带值,再求导.

一定要先将符合函数按照求导的规则展开,再带值.

设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x))$

此题中,我们用 LCT 维护 $x^{i}$ 前的系数和,每次询问时将一条链的系数和提出,将 $x$ 带入其前 15 项即可.

Code:

#include<bits/stdc++.h>
using namespace std;
#define maxn 500000
#define M 17
#define setIO(s) freopen(s".in","r",stdin) //,freopen(s".out","w",stdout)
namespace tree{
#define ls ch[x][0]
#define rs ch[x][1]
#define lson ch[x][0]
#define rson ch[x][0]
int ch[maxn][2],f[maxn],op[maxn],rev[maxn];
int sta[maxn];
double s[maxn][30],a[maxn],b[maxn];
int get(int x){ return ch[f[x]][1]==x; }
int isrt(int x){ return !(ch[f[x]][0]==x||ch[f[x]][1]==x); }
void rever(int x){
if(!x) return;
rev[x]^=1;
swap(ch[x][0],ch[x][1]);
}
void pd(int x){
if(!rev[x]||!x) return;
if(rev[x]) rever(ch[x][0]),rever(ch[x][1]),rev[x]=0;
}
void up(int x){
for(int i=0;i<M;++i)s[x][i]=s[ch[x][0]][i]+s[ch[x][1]][i];
if(op[x]==1){
double val=1.00000,Sin=sin(b[x]),Cos=cos(b[x]);
for(int i=0;i<M;i+=4){
s[x][i]+=val*Sin,val*=a[x];
s[x][i+1]+=val*Cos,val*=a[x];
s[x][i+2]-=val*Sin,val*=a[x];
s[x][i+3]-=val*Cos,val*=a[x];
}
}
if(op[x]==2){
double EXP=exp(b[x]),val=1.000000;
for(int i=0;i<M;++i){
s[x][i]+=EXP*val,val*=a[x];
}
}
if(op[x]==3){
s[x][0]+=b[x],s[x][1]+=a[x];
}
}
void rotate(int x){
int old=f[x],oldf=f[old],which=get(x);
if(!isrt(old))ch[oldf][ch[oldf][1]==old]=x;
ch[old][which]=ch[x][which^1],f[ch[old][which]]=old;
ch[x][which^1]=old,f[old]=x,f[x]=oldf;
up(old),up(x);
}
void splay(int x){
int v=0,u=x;
sta[++v]=u;
while(!isrt(u)) sta[++v]=f[u],u=f[u];
while(v) pd(sta[v--]);
u=f[u];
for(int fa;(fa=f[x])!=u;rotate(x))
if(f[fa]!=u) rotate(get(fa)==get(x)?fa:x);
}
void Access(int x){
for(int y=0;x;y=x,x=f[x]) splay(x),ch[x][1]=y,up(x);
}
void makert(int x){
Access(x),splay(x),rever(x);
}
void split(int x,int y){
makert(x),Access(y),splay(y);
}
void del(int x,int y){
split(x,y); f[x]=ch[y][0]=0; up(y);
}
void link(int x,int y){
makert(x),f[x]=y;
}
int fd(int x){
Access(x);
splay(x);
while(ch[x][0]) x=ch[x][0];
splay(x); return x;
}
};
double jc[maxn];
void init(){
jc[0]=1.000;
for(int i=1;i<M;++i) jc[i]=jc[i-1]*i;
}
int main(){
//setIO("input");
init();
char str[20];
int n,m;
scanf("%d%d%s",&n,&m,str);
for(int i=1;i<=n;++i) scanf("%d%lf%lf",&tree::op[i],&tree::a[i],&tree::b[i]);
while(m--){
scanf("%s",str);
if(str[0]=='a') {
int x,y;
scanf("%d%d",&x,&y);
++x,++y;
tree::link(x,y);
}
if(str[0]=='d') {
int x,y;
scanf("%d%d",&x,&y);
++x,++y;
tree::del(x,y);
}
if(str[0]=='m'){
int x,y;
double w,k;
scanf("%d%d%lf%lf",&x,&y,&w,&k);
++x;
tree::Access(x),tree::splay(x);
tree::op[x]=y,tree::a[x]=w,tree::b[x]=k;
tree::up(x);
}
if(str[0]=='t'){
int u,v;
double w;
scanf("%d%d%lf",&u,&v,&w);
++u,++v;
if(tree::fd(u)!=tree::fd(v)){
printf("unreachable\n");
}else{
tree::split(u,v);
double ans=0.0,val=1.00000;
for(int i=0;i<M;++i){
ans+=(double)tree::s[v][i]*val/jc[i];
val*=w;
}
printf("%.8e\n",ans);
}
}
}
return 0;
}

  

[THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导的更多相关文章

  1. [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)

    5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 323  ...

  2. 【BZOJ5020】[LOJ2289]【THUWC2017】在美妙的数学王国中畅游 - LCT+泰勒展开

    咕咕咕?咕咕咕! 题意: Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言 ...

  3. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)

    Description 数字和数学规律主宰着这个世界.   机器的运转,   生命的消长,   宇宙的进程,   这些神秘而又美妙的过程无不可以用数学的语言展现出来.   这印证了一句古老的名言:   ...

  4. Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开

    传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...

  5. 【BZOJ5020】【THUWC2017】在美妙的数学王国中畅游 LCT 泰勒展开

    题目大意 给你一棵树,每个点有一个函数\(f(x)\) 正弦函数 \(\sin(ax+b) (a\in[0,1],b\in[0,\pi],a+b\in[0,\pi])\) 指数函数 \(e^{ax+b ...

  6. 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]

    传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...

  7. [THUWC2017][bzoj5020] 在美妙的数学王国中畅游 [LCT+泰勒展开]

    题面 LOJ传送门 思路 这里很重要 它提示我们,把给定的三个函数泰勒展开,并用LCT维护每一项泰勒展开式的值,维护十几项就满足了题目的精度要求 我们考虑一个函数在0位置的泰勒展开 $f(x)=\su ...

  8. 「LOJ 2289」「THUWC 2017」在美妙的数学王国中畅游——LCT&泰勒展开

    题目大意: 传送门 给一个动态树,每个节点上维护一个函数为$f(x)=sin(ax+b)$.$f(x)=e^{ax+b}$.$f(x)=ax+b$中的一个. 支持删边连边,修改节点上函数的操作. 每次 ...

  9. bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...

随机推荐

  1. python编写简单的html登陆页面(3)

    1  在python编写简单的html登陆页面(2)的基础上在延伸一下: 可以将静态分配数据,建立表格,存放学生信息 2  加载到静态数据 3  html的编写直接在表格里添加一组数据就行了 4  V ...

  2. 初级模拟电路:1-2 PN结与二极管

    回到目录 1.   掺杂半导体 上面我们分析了本征半导体的导电情况,但由于本征半导体的导电能力很低,没什么太大用处.所以,一般我们会对本征半导体材料进行掺杂,即使只添加了千分之一的杂质,也足以改变半导 ...

  3. linux ubuntu安装好后,开通远程登录

    1.设置root密码 ubuntu安装好后,用初始的第一个用户登录,然后修改root密码: sudo passwd root 2.检查sshd服务是否启动 (1)查看sshd状态 -----若没有ss ...

  4. 00068_Date类

    1.类Date表示特定的瞬间,精确到毫秒: 2.查阅Date类的描述,发现Date拥有多个构造函数,只是部分已经过时,但是其中有未过时的构造函数可以把毫秒值转成日期对象: //创建日期对象,把当前的毫 ...

  5. 【codeforces 723E】One-Way Reform

    [题目链接]:http://codeforces.com/contest/723/problem/E [题意] 给你一个无向图; 让你把这m条边改成有向图; 然后使得出度数目等于入度数目的点的数目最多 ...

  6. 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclips

    警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclips ...

  7. java web项目发生异常依然能运行

    由于JavaWeb应用业务逻辑的复杂性,容易发生一些意想不到的错误和异常,给系统的调试带来不必要的麻烦,不友好的提示信息使编程者对错误和异常无从下手.特别是当发生异常时,Java异常栈输出的信息只能给 ...

  8. spring datasource和mybatis的datasource来源在哪里

    配置一个数据源     spring在第三方依赖包中包含了两个数据源的实现类包,其一是Apache的DBCP,其二是 C3P0.可以在Spring配置文件中利用这两者中任何一个配置数据源.  配置一个 ...

  9. CCEditBox/CCEditBoxImpl

    #ifndef __CCEditBoxIMPL_H__ #define __CCEditBoxIMPL_H__ #include "cocos2d.h" #include &quo ...

  10. HDU 4454

    想了很久,发现其实就只需要三分枚举圆上的点,到矩形的最短很容易就可以求到了.开始时考虑要不要根据矩形相对圆的方位来划分枚举区间,后来发现一定不能这样做的. 注意题目给的是矩形的对角形,但没说哪一条对角 ...