[tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]
这样的题解只能舔题解了,,,qaq
清橙资料里有。。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <algorithm> using namespace std; struct Matrix
{
double a,b,c,d;
}; struct node
{
double S0,S1;
Matrix S2;
}tree[]; double a[]; void push_up(const int num,const int pos)
{
node &temp1=tree[num<<],&temp2=tree[num<<|];
tree[num].S0=temp1.S0+temp2.S0-a[pos]*a[pos+];
tree[num].S1=temp1.S1+temp2.S1;
Matrix t1=temp1.S2,t2=temp2.S2;
tree[num].S2=(Matrix){t1.a*t2.a,t1.a*t2.b+t1.b,t1.c*t2.a+t2.c,t1.c*t2.b+t1.d+t2.d};
return ;
} void Change(const int l,const int r,const int num,const int s,const node d)
{
if(l==r)
{
a[l]=d.S0;
tree[num]=d;
return ;
} int mid=l+((r-l)>>); if(s<=mid)Change(l,mid,num<<,s,d);
else Change(mid+,r,num<<|,s,d); push_up(num,mid);
return ;
} node Calc(const node temp1,const node temp2,const int pos)
{
node A; A.S0=temp1.S0+temp2.S0-a[pos]*a[pos+];
A.S1=temp1.S1+temp2.S1; Matrix t1=temp1.S2,t2=temp2.S2;
A.S2=(Matrix){t1.a*t2.a,t1.a*t2.b+t1.b,t1.c*t2.a+t2.c,t1.c*t2.b+t1.d+t2.d}; return A;
} node Query(const int l,const int r,const int num,const int s,const int t)
{
if(s<=l && r<=t)
return tree[num]; int mid=l+((r-l)>>); if(t<=mid)return Query(l,mid,num<<,s,t);
if(s>mid) return Query(mid+,r,num<<|,s,t);
return Calc(Query(l,mid,num<<,s,t),Query(mid+,r,num<<|,s,t),mid);
} int main()
{
int n,m,i,op; scanf("%d%d",&n,&m); for(i=;i<=n;++i)
scanf("%lf",&a[i]);
for(i=;i<=n;++i)
Change(,n,,i,(node){a[i],a[i],(Matrix){a[i],a[i]*,a[i],a[i]}}); for(i=;i<=m;++i)
{
scanf("%d",&op); if(op==)
{
int x,y;
scanf("%d%d",&x,&y); node temp=Query(,n,,x,y);
printf("%.2f\n",temp.S0+temp.S1+temp.S2.d);
} if(op==)
{
int x;
double y; scanf("%d%lf",&x,&y);
Change(,n,,x,(node){y,y,(Matrix){y,y*,y,y}});
}
}
return ;
}
[tsA1490][2013中国国家集训队第二次作业]osu![概率dp+线段树+矩阵乘法]的更多相关文章
- [TS-A1489][2013中国国家集训队第二次作业]抽奖[概率dp]
概率dp第一题,开始根本没搞懂,后来看了09年汤可因论文才基本搞懂,关键就是递推的时候做差比较一下,考虑新加入的情况对期望值的贡献,然后推推公式(好像还是不太会推qaq...) #include &l ...
- [tsA1491][2013中国国家集训队第二次作业]家族[并查集]
m方枚举,并查集O(1)维护,傻逼题,,被自己吓死搞成神题了... #include <bits/stdc++.h> using namespace std; struct tri { i ...
- [TS-A1488][2013中国国家集训队第二次作业]魔法波[高斯消元]
暴力直接解异或方程组,O(n^6)无法接受,那么我们考虑把格子分块,横着和竖着分别分为互不影响的块,这样因为障碍物最多不超过200个,那么块的个数最多为2*(800+200)=2000个,最后用bit ...
- [TS-A1487][2013中国国家集训队第二次作业]分配游戏[二分]
根据题意,设$3n$次比较中胜了$w$次,负了$l$次,平了$d$次,所有场次中胜了$W$次,负了$L$次,平了$D$次.如果一场赢了,那么$w-l$就会$+1$,相同地,$W-L$也会$+1$:如果 ...
- [TS-A1486][2013中国国家集训队第二次作业]树[树的重心,点分治]
首先考虑暴力,可以枚举每两个点求lca进行计算,复杂度O(n^3logn),再考虑如果枚举每个点作为lca去枚举这个点的子树中的点复杂度会大幅下降,如果我们将每个点递归考虑,每次计算过这个点就把这个点 ...
- [TS-A1505] [清橙2013中国国家集训队第二次作业] 树 [可持久化线段树,求树上路径第k大]
按Dfs序逐个插入点,建立可持久化线段树,每次查询即可,具体详见代码. 不知道为什么,代码慢的要死,, #include <iostream> #include <algorithm ...
- MAZE(2019年牛客多校第二场E题+线段树+矩阵乘法)
题目链接 传送门 题意 在一张\(n\times m\)的矩阵里面,你每次可以往左右和下三个方向移动(不能回到上一次所在的格子),\(1\)表示这个位置是墙,\(0\)为空地. 现在有\(q\)次操作 ...
- < < < 2013年国家集训队作业 > > >
完成题数/总题数: 道/37道 1. A1504. Book(王迪): 数论+贪心 ★★☆ 2013中国国家集训队第二次作业 2. A1505. 树(张闻涛): 倍增LCA+可 ...
- [转] ACM中国国家集训队论文集目录(1999-2009)
国家集训队1999论文集 陈宏:<数据结构的选择与算法效率——从IOI98试题PICTURE谈起>来煜坤:<把握本质,灵活运用——动态规划的深入探讨>齐鑫:<搜索方法中的 ...
随机推荐
- 异常java.lang.UnsupportedOperationException: The application must supply JDBC connections
转自:https://blog.csdn.net/q952420873/article/details/81355586 先上图 根据这个错误溯源 于是 我来到了数据库连接部分的代码 ,发现多了一个 ...
- C语言作用于修饰符
之前就遇到了坑,莫名其妙报错. 总结下: extern 声明在其他文件里 static 仅当前文件可见
- 洛谷P1613 跑路(最短路+倍增)
P1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的 ...
- Netty--数据通信和心跳检测
数据通信 概述: netty的ReadTimeOut实现方案3 服务端: public class Server { public static void main(String[] args) th ...
- python自动化测试学习笔记-4常用模块
常用模块 1.os 2.sys 3.random 4.string 5.time 6.hashlib 一.os模块 os模块主要用来操作文件.目录,与操作系统无关.要使用os模块首先要导入OS模块,用 ...
- CSS怎样改变行内样式(通过外部级联样式表) css !important用法CSS样式使用优先级判断
CSS样式优先级 行内>内部>外部 使用!important的css定义是拥有最高的优先级的.只是在ie6下出了一点小的bug,注意书写方式一般可以轻松避开的. CSS中的!importa ...
- Kotlin实例----android5.0新特性之palette
一.Palette的使用 使用Palette可以让我们从一张图片中拾取颜色,将拾取到的颜色赋予ActionBar,StatusBar以及UI背景色可以让界面色调实现统一或者加载不同图片时同步变化色调 ...
- Angular——基本使用
基本介绍 1.AngularJS是一个框架(诸多类库的集合)以数据和逻辑做为驱动(核心). 2.AngularJS有着诸多特性,最为核心的是:模块化.双向数据绑定.语义化标签.依赖注入等. 模块化 使 ...
- jQuery——类的添加与删除
添加类:addClass 删除类:removeClass 判断类是否存在:hasClass <!DOCTYPE html> <html lang="en"> ...
- 想学Python?这里有一个最全面的职位分析
Python从2015年开始,一直处于火爆的趋势,目前Python工程师超越Java.Web前端等岗位,起薪在15K左右,目前不管是小公司还是知名大公司都在热招中. 当然,每个城市对岗位的需求也不尽相 ...