「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. Web 网站进化

    01-初始阶段   应用程序.数据库.文件等所有资源都在一台服务器上 02-应用服务与数据服务分离 应用服务器 要处理大量的业务逻辑,所以需要更好更快更强大的 CPU 数据库服务器 需要快速的进行磁盘 ...

  2. Geometric GAN

    目录 概 主要内容 McGAN 结合SVM 训练 训练 理论分析 证明 Jae Hyun Lim, Jong Chul Ye, Geometric GAN. 概 很有趣, GAN的训练过程可以分成 寻 ...

  3. [算法笔记-题解]问题 A: 例题4-1 一元二次方程求根

    问题 A: 例题4-1 一元二次方程求根 [命题人 : 外部导入] 时间限制 : 1.000 sec 内存限制 : 12 MB 题目描述 求一元二次方程ax2+bx+c=0的根,三个系数a, b, c ...

  4. Python 安装第三方模块时 报Retrying(Retry(total=4, connect=None, read=None, redirect=None, status=None))...[WinError 10061]由于目标计算机积极拒绝,无法连接 错误

    今日在安装ddt模块时(Windows系统),cmd报了一个以前从未见过的错误,如下图所示: 经百度,知是镜像源的问题,将安装命令改成如下命令: pip install ddt -i https:// ...

  5. Servlet中分发器和重定向两兄弟

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513702111698485767/ 弄清这个两兄弟,我们还是从练习中去理解 先创建一个数据提交页面,注意路径 编 ...

  6. 灵雀云发布云原生制品仓库Harbor企业版(Alauda Registry Service for Harbor)

      灵雀云发布云原生制品仓库Harbor企业版(Alauda Registry Service for Harbor) 近日,国内领先的云原生全栈私有云提供商灵雀云宣布,推出企业版云原生制品仓库Ala ...

  7. 基本的sql语法

    1. SELECT: 用于从数据库中选取数据 SELECT name,value FROM table_name 2.SELECT DISTINCT 语句用于返回唯一不同的值(去重) 3.WHERE ...

  8. Python网络编程之网络基础

    Python网络编程之网络基础 目录 Python网络编程之网络基础 1. 计算机网络发展 1.1. OSI七层模型 1.2. 七层模型传输数据过程 2. TCP/IP协议栈 2.1 TCP/IP和O ...

  9. RHCSA 第五天

    1. a.创建普通变量local_data=1并访问 [root@sss ~]#local_data=1 [root@sss ~]#echo local_data local_data [root@s ...

  10. web刷题记录 极客大挑战2019Knife upload buy a flag

    极客2019Knife webshell就是以asp.php.jsp或者cgi等网页文件形式存在的一种代码执行环境,主要用于网站管理.服务器管理.权限管理等操作.使用方法简单,只需上传一个代码文件,通 ...