「NOI十联测」奥义商店
「NOI十联测」奥义商店
若lzz想花费最少的钱,那么显然要选择数目较少的颜色。
先考虑暴力的写法。
每次向两边统计,每个物品要求被买的概率可以由上一个物品推出。
now=1;//now 被买概率 M 选择的颜色的数目
for(int q=1;st+d*q<=n&&q<=cnt[1];++q){
now*=(M-q+1.0)/(n-1-q+1);//当前点被涂上选择的颜色的概率 * 先前的物品也涂上选择的颜色
ans+=val[st+d*q]*now;
}
now=1;
for(int q=1;st-d*q>0&&q<=cnt[1];++q){//同上
now*=(M-q+1.0)/(n-1-q+1);
ans+=val[st-d*q]*now;
}
观察到,当\(2 \leq t\),那么\(M \leq {n \over 2}\),而此时now的衰减极快,大约可以在\(log_2(10^8)\)次数内不再对答案的有贡献(精度问题)。因此可以做到查询复杂度\(o(log)\),修改复杂度\(o(1)\)。
当\(t=1\),颜色只有一种,故只要是在等差序列上的点,都要被选中。
对于\(\sqrt n \leq d\)的情况,可以暴力计算,询问复杂度\(o(\sqrt n)\),修改复杂度\(o(1 )\)。
对于\(\sqrt n \geq d\)的情况,可以对每个d和每个起始点都预处理一遍答案,询问复杂度\(o(1)\),修改复杂度\(o(\sqrt n )\)。
故可以得到时间和空间都为\(o(n \sqrt n)\)的算法。
#include<bits/stdc++.h>
#define rep(q,a,b) for(int q=a,q##_end_=b;q<=q##_end_;++q)
#define dep(q,a,b) for(int q=a,q##_end_=b;q>=q##_end_;--q)
#define mem(a,b) memset(a,b,sizeof a )
#define debug(a) cerr<<#a<<' '<<a<<"___"<<endl
using namespace std;
void in(int &r) {
static char c;
r=0;
while(c=getchar(),c<48);
do r=(r<<1)+(r<<3)+(c^48);
while(c=getchar(),c>47);
}
bool cur1;
const int mn=100005;
int n,m,val[mn];
int sq,sum[330][330];
void get1(int st,int d){
if(d<=sq)printf("%.4lf\n",(double)sum[d][st%d]);
else{
int ans=val[st];
for(int q=1;st+d*q<=n;++q)ans+=val[st+d*q];
for(int q=1;st-d*q>0;++q)ans+=val[st-d*q];
printf("%.4lf\n",(double)ans);
}
}
void get(int col,int st,int d,int M){
double ans=val[st],now=1;
for(int q=1;st+d*q<=n&&q<=M;++q){
if(now<1e-10)break;
now*=(M-q+1.0)/(n-1-q+1);
ans+=val[st+d*q]*now;
}
now=1;
for(int q=1;st-d*q>0&&q<=M;++q){
if(now<1e-10)break;
now*=(M-q+1.0)/(n-1-q+1);
ans+=val[st-d*q]*now;
}
printf("%.4lf\n",ans);
}
void change(int x,int v){
int d=v-val[x];
val[x]=v;
rep(w,1,sq)sum[w][x%w]+=d;
}
bool cur2;
int main(){
// cerr<<(&cur1-&cur2)/1024.0/1024.0;
freopen("lzz.in","r",stdin);
freopen("lzz.out","w",stdout);
in(n),in(m);
rep(q,1,n)in(val[q]);
sq=sqrt(n)+1;
rep(q,1,sq)rep(w,1,n)sum[q][w%q]+=val[w];
int a,b,c,d;
while(m--){
in(a),in(b),in(c);
if(a==1)change(b,c);
else{
in(d);
int M=1e9;
rep(q,1,b)in(a),M=min(a,M);
if(b==1)get1(c,d);
else get(b,c,d,M);
}
}
return 0;
}
「NOI十联测」奥义商店的更多相关文章
- 「NOI十联测」深邃
「NOI十联测」深邃 要使得最大的连通块最小,显然先二分答案. 先固定1结点为根. 对于一个果实,显然是先处理子树中未分配的点,再向外延伸. 每个结点记录一个\(si[]\),表示子树中未分配的点数, ...
- 「NOI十联测」黑暗
「NOI十联测」黑暗 \(n\) 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 \(m\) 次方,求所有可能的图的权值和.(n≤30000,m≤15) 令\(ans[n][m]\)为n个 ...
- 「NOI十联测」反函数
30pts 令(为1,)为-1: 暴力枚举每个点为起始点的路径,一条路径是合法的当且仅当路径权值和为0且路径上没有出现过负数. 将所有答案算出. 100pts 使用点分治. 要求知道经过重心root的 ...
- HHHOJ #153. 「NOI模拟 #2」Kotomi
抽代的成分远远大于OI的成分 首先把一个点定为原点,然后我们发现如果我们不旋转此时答案就是所有位置的\(\gcd\) 如果要选择怎么办,我们考虑把我们选定的网格边连同方向和大小看做单位向量\(\vec ...
- HHHOJ #151. 「NOI模拟 #2」Nagisa
计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...
- Solution -「NOI 模拟赛」彩色挂饰
\(\mathcal{Description}\) 给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,设图中最大点双的大小为 \(s\),则保证 \(s\le6\).你将要用 \(k\) ...
- Solution -「NOI 模拟赛」出题人
\(\mathcal{Description}\) 给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...
- 「洛谷 P1801」黑匣子
好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...
- Diary -「NOI 2021」酱油记
雨幕浓稠 远近一白 是水雾弥漫的天 还是泡沫撑起的海 雨真大呢. 前几天去 ZH 中学集训没啥好记的,就从会合日开始叭. [Day -1] 逃出 ZH,掉入梦麟.( 高中的同学们忘记带 ...
随机推荐
- 如何把 MySQL 备份验证性能提升 10 倍
JuiceFS 非常适合用来做 MySQL 物理备份,具体使用参考我们的官方文档.最近有个客户在测试时反馈,备份验证的数据准备(xtrabackup --prepare)过程非常慢.我们借助 Juic ...
- rsync 守护进程及实时同步
目录 rsync 守护进程及实时同步 rsync简介 rsync特性 rsync应用场景 cp命令 scp命令 rsync的传输方式 rsync的传输模式 rsync实际使用 rsync命令 案例 r ...
- 浏览器Cookie无法删除问题
1.写Cookie时添加路径: //写cookies,设置过期时间为30天,并设置path为根目录 function setPathCookie(name,value) { var Days = 30 ...
- Orthogonal Convolutional Neural Networks
目录 概 主要内容 符号说明 的俩种表示 kernel orthogonal regularization orthogonal convolution Wang J, Chen Y, Chakrab ...
- 【jvm】02-手写自己的类加载器
[jvm]02-手写自己的类加载器 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺手点个赞.加个 ...
- Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...
- Java中的对象、类、抽象类、接口的理解
1.对象 对象是个具体的东西,有着明确的属性特征和行为特征. 例如:你手上牵着的女朋友或男朋友就是个具体的对象. 如图中的苏格兰折耳猫,特征是耳朵向下呈折叠状,有着具体的颜色(你看到的颜色),并且和其 ...
- .NET 微服务——CI/CD(3):镜像自动分发
如何通过Jenkins完成镜像分发?基本做法是:打包镜像→上传镜像到仓库→脚本分发.镜像仓库也有很多,比如docker hub.Harbor等,今天这一篇讲一下基于阿里云镜像仓库的操作. 首先,准备一 ...
- CSS过渡、CSS动画
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <script s ...
- 04.python哈希表
python哈希表 集合Set 集合,简称集.由任意个元素构成的集体.高级语言都实现了这个非常重要的数据结构类型. Python中,它是可变的.无序的.不重复的元素的集合. 初始化 set() -&g ...