「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十联测」奥义商店的更多相关文章

  1. 「NOI十联测」深邃

    「NOI十联测」深邃 要使得最大的连通块最小,显然先二分答案. 先固定1结点为根. 对于一个果实,显然是先处理子树中未分配的点,再向外延伸. 每个结点记录一个\(si[]\),表示子树中未分配的点数, ...

  2. 「NOI十联测」黑暗

    「NOI十联测」黑暗 \(n\) 个点的无向图,每条边都可能存在,一个图的权值是连通块个数的 \(m\) 次方,求所有可能的图的权值和.(n≤30000,m≤15) 令\(ans[n][m]\)为n个 ...

  3. 「NOI十联测」反函数

    30pts 令(为1,)为-1: 暴力枚举每个点为起始点的路径,一条路径是合法的当且仅当路径权值和为0且路径上没有出现过负数. 将所有答案算出. 100pts 使用点分治. 要求知道经过重心root的 ...

  4. HHHOJ #153. 「NOI模拟 #2」Kotomi

    抽代的成分远远大于OI的成分 首先把一个点定为原点,然后我们发现如果我们不旋转此时答案就是所有位置的\(\gcd\) 如果要选择怎么办,我们考虑把我们选定的网格边连同方向和大小看做单位向量\(\vec ...

  5. HHHOJ #151. 「NOI模拟 #2」Nagisa

    计算几何板子题(我才没有拷板子的说--) 众所周知,三角形的重心坐标是\((\frac{x_1+x_2+x_3}{3},\frac{y_1+y_2+y_3}{3})\) 然后我们发现如果我们有一个点集 ...

  6. Solution -「NOI 模拟赛」彩色挂饰

    \(\mathcal{Description}\)   给定一个含 \(n\) 个点 \(m\) 条边的简单无向图,设图中最大点双的大小为 \(s\),则保证 \(s\le6\).你将要用 \(k\) ...

  7. Solution -「NOI 模拟赛」出题人

    \(\mathcal{Description}\)   给定 \(\{a_n\}\),求一个 \(\{b_{n-1}\}\),使得 \(\forall x\in\{a_n\},\exists i,j\ ...

  8. 「洛谷 P1801」黑匣子

    好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...

  9. Diary -「NOI 2021」酱油记

    雨幕浓稠 远近一白 是水雾弥漫的天 还是泡沫撑起的海   雨真大呢.   前几天去 ZH 中学集训没啥好记的,就从会合日开始叭. [Day -1]   逃出 ZH,掉入梦麟.(   高中的同学们忘记带 ...

随机推荐

  1. Autofac 依赖注入小知识

    Autofac 依赖注入小知识 控制反转/依赖注入 IOC/DI 依赖接口而不依赖于实现,是面向对象的六大设计原则(SOLID)之一.即依赖倒置原则(Dependence Inversion Prin ...

  2. hbase构建二级索引解决方案

    关注公众号:大数据技术派,回复"资料",领取1024G资料. 1 为什么需要二级索引 HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索.假设我们相对Hbas ...

  3. Deepin20系统安装Nvidia驱动

    Deepin20系统安装Nvidia驱动 系统设备配置信息如下: 电脑型号:华硕天选air[ASUS-FX516P] 显卡型号:RTX 3070 移动版独显 处理器型号: 11th Gen Intel ...

  4. CS5213demoboard设计电路|DMI转VGA带II2S音频输出转接线|CS5213方案

    CS5213是台湾CAPSTONE瑞奇达推出的一款HDMI(高清多媒体接口)到VGA转换芯片. CS5213设计HDMI转VGA带II2S转接线产品特性: ◇将完整的HDMI信号转换为VGA输出◇支持 ...

  5. 关于 Spring-WebFlux 的一些想法

    本文是本人在知乎提问 spring webflux现在看来是否成功? 下的回答,其他回答也很精彩,如果感兴趣可以查看 现在基于 spring web 的同步微服务有一个非常大的缺陷就是:相对于基于 s ...

  6. GitForWindows工具集(GitBash命令行)

    1.Git For Windows工具集 Git For Windows专注于提供一套轻量级的本地工具集, 它将Git SCM的完整功能集引入Windows, 同时为Git用户提供适当的用户界面, 方 ...

  7. 初识python 之 smtplib 发送(dolphinscheduler任务监测)邮件

    需求 监测dolphinscheduler调度系统,任务执行异常情况.如有异常,则发送邮件通知. 处理思路 因DS本身自带的邮件发送功能,不能正常发送邮件. 故而,通过查询DS源数据表,获取当前任务执 ...

  8. scp 文件传输

    1.推送 scp -r imageAPP/ root@ip:/data/soft/ 本地当前文件下的 imageAPP文件 推送到ip服务器 /data/soft/ 目录下 2.拉取 scp -r r ...

  9. Python中的GIL锁

    在Python中,可以通过多进程.多线程和多协程来实现多任务. 在多线程的实现过程中,为了避免出现资源竞争问题,可以使用互斥锁来使线程同步(按顺序)执行. 但是,其实Python的CPython(C语 ...

  10. 方法覆盖 和toString方法的作用

    当我们代码怎么编写的时候,在代码级别上构成了方法的覆盖呢? 两个类必须要有继承关系. 重写之后的方法和之前的方法具有:相同的返回值类型 相同的方法名 相同的形参列表 访问权限不能更高,只能更低 重写之 ...