COCI2015-2016#1 RELATIVNOST

P6533 [COCI2015-2016#1] RELATIVNOST

題目大意

L L L在賣畫。這些畫分為彩色畫和黑白畫,小 L L L希望有至少 c c c個人會買走他至少一張彩色畫。

i i i個人至多會購買 a i a_i ai?張彩色畫或者 b i b_i bi?張黑白畫,且每個人至少購買一張畫。

每個人只能選擇購買彩色畫或黑白畫。

q q q次修改,每次修改會選擇一個 i i i并修改 a i a_i ai? b i b_i bi?。求每次修改之后能滿足小 L L L的要求的買畫的方案數。輸出答案模 1 0 4 + 7 10^4+7 104+7后的值。

1 ≤ n , q ≤ 1 0 5 , 1 ≤ c ≤ 20 1\leq n,q\leq 10^5,1\leq c\leq 20 1n,q105,1c20

時間限制 4000 m s 4000ms 4000ms,空間限制 32 M B 32MB 32MB


題解

f i , j f_{i,j} fi,j?表示前 i i i個人有 j j j個人選擇彩色畫的方案數,則轉移式為

f i , j = f i ? 1 , j ? 1 × a i + f i ? 1 , j × b i f_{i,j}=f_{i-1,j-1}\times a_i+f_{i-1,j}\times b_i fi,j?=fi?1,j?1?×ai?+fi?1,j?×bi?

因為有修改,所以我們考慮用線段樹來優化。用線段樹維護每一個區間的方案數,那么

t r [ k ] . f [ i + j ] + = t r [ l c ] . f [ i ] × t r [ r c ] . f [ j ] tr[k].f[i+j]+=tr[lc].f[i]\times tr[rc].f[j] tr[k].f[i+j]+=tr[lc].f[i]×tr[rc].f[j]

在只有一個人時, t r [ k ] . f [ 1 ] = a i , t r [ k ] . f [ 0 ] = b i tr[k].f[1]=a_i,tr[k].f[0]=b_i tr[k].f[1]=ai?,tr[k].f[0]=bi?

空間限制為 32 M B 32MB 32MB,對于 int \text{int} int類型能開 24 × 1024 × 1024 / 4 = 8388608 24\times 1024\times 1024/4=8388608 24×1024×1024/4=8388608的大小。線段樹的大小為 4 n c = 8000000 4nc=8000000 4nc=8000000 a , b a,b a,b數組的大小都是 1 0 5 10^5 105,是可行的。注意空間復雜度,能節省的空間盡量節省。

時間復雜度為 O ( n c 2 log ? n ) O(nc^2\log n) O(nc2logn),空間復雜度為 O ( n c ) O(nc) O(nc)

code

#include<bits/stdc++.h>
#define lc k<<1
#define rc k<<1|1
using namespace std;
const int N=100000;
const int mod=1e4+7;
int n,c,q,a[N+5],b[N+5],tr[4*N+5][21];
void pt(int k){for(int i=0;i<=c;i++) tr[k][i]=0;for(int i=0;i<=c;i++){for(int j=0;j<=c;j++){tr[k][min(i+j,c)]=(tr[k][min(i+j,c)]+tr[lc][i]*tr[rc][j])%mod;}}
}
void build(int k,int l,int r){if(l==r){tr[k][1]=a[l]%mod;tr[k][0]=b[l]%mod;return;}int mid=l+r>>1;build(lc,l,mid);build(rc,mid+1,r);pt(k);
}
void ch(int k,int l,int r,int p,int x,int y){if(l==r&&l==p){tr[k][1]=x%mod;tr[k][0]=y%mod;return;}int mid=l+r>>1;if(p<=mid) ch(lc,l,mid,p,x,y);else ch(rc,mid+1,r,p,x,y);pt(k);
}
int main()
{scanf("%d%d",&n,&c);for(int i=1;i<=n;i++) scanf("%d",&a[i]);for(int i=1;i<=n;i++) scanf("%d",&b[i]);build(1,1,n);scanf("%d",&q);while(q--){int p,x,y;scanf("%d%d%d",&p,&x,&y);ch(1,1,n,p,x,y);printf("%d\n",tr[1][c]);}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/696519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/696519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/696519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Android---Jetpack Compose學習007

Compose 附帶效應 a. 純函數 純函數指的是函數與外界交換數據只能通過函數參數和函數返回值來進行&#xff0c;純函數的運行不會對外界環境產生任何的影響。比如下面這個函數&#xff1a; fun Add(a : Int, b : Int) : Int {return a b } “副作用”&#xff08;side effe…

單例模式的介紹

單例模式&#xff08;Singleton&#xff09;是一種創建型設計模式&#xff0c;它確保一個類只有一個實例&#xff0c;并提供全局訪問點。其核心思想是通過限制類的實例化次數&#xff0c;防止多個實例同時存在&#xff0c;從而避免了多線程競爭和資源浪費&#xff0c;提高了代碼…

【藍橋杯單片機入門記錄】靜態數碼管

目錄 一、數碼管概述 &#xff08;1&#xff09;認識數碼管 &#xff08;2&#xff09;數碼管的工作原理 &#xff08;3&#xff09;LED數碼管驅動方式-靜態顯示 二、數碼管電路圖 三、靜態數碼管顯示例程 &#xff08;1&#xff09;例程1&#xff1a;數碼管顯示某一位&a…

vue、thinkphp實現騰訊云對象存儲COS圖片上傳

環境&#xff1a; thinkphp6 vue2 vant2.12 composer安裝qcloud-sts-sdk composer require qcloud_sts/qcloud-sts-sdk獲取COS臨時id、key的sts接口 <?php declare (strict_types 1);namespace app\index\controller; use QCloud\COSSTS\Sts;class CosController {//h…

如何為PostgreSQL設置自增主鍵?

在 PostgreSQL 中&#xff0c;自增主鍵通常是通過使用 SERIAL 類型或在新版本中使用 IDENTITY 列來實現的。 1. 使用 SERIAL 類型 SERIAL 是一個自動增加的整數&#xff0c;常用于主鍵。當插入新的行時&#xff0c;PostgreSQL 會自動為這個列生成一個新的值。 ??例如 CREAT…

PYQT5-自定義事件

from PyQt5.QtCore import QEvent, QObject from PyQt5.QtWidgets import QApplication import sys# 自定義事件類 class CustomEvent(QEvent):# PYQT5 預留給用戶自定義事件類型的起點為 QEvent.User1000custom_event_type QEvent.registerEventType()# 也可以這樣寫# custom…

2024.2.22

P1162 #include<map> #include<vector> #include<iostream> #include<math.h> #include<algorithm> #include<string> using namespace std; const int N 1020; int n; int g[N][N];//標記數組 int a[N][N];//儲存數組 int dx[] { -1…

webstorm光標變成方塊解決辦法_webstorm光標變粗不能換行

webstorms光標變了 鍵盤上的insert是切換的快捷鍵&#xff0c;敲insert就可以來回切換了

回顧 | Java面向對象 多態篇

多態是面向對象編程中的一個重要概念&#xff0c;它允許不同的對象對同一消息做出不同的響應。 通過多態&#xff0c;可以通過父類或接口定義的引用變量來操作子類或實現類的對象&#xff0c;從而實現同一方法在不同對象上的不同行為。 在Java中&#xff0c;多態性主要通過繼…

雙通道并行網絡,想用哪個網絡用哪個,MATLAB代碼

本期可謂是寶藏篇&#xff01;學會本期的思想&#xff0c;幫助你分分鐘找到創新點&#xff0c;且不與別人重復&#xff01; 本期采用MATLAB代碼&#xff0c;實現一種“基于格拉姆角場與并行CNN的故障診斷方法”。該方法的具體實現可以參考文獻&#xff1a; [1]李宗源,陳謙,錢…

React native更改包名后,啟動app的activity包名不生效問題

這篇文章本不算記錄的&#xff0c;因為實際開發中&#xff0c;類似這種小問題會有很多很多&#xff0c;因為導致問題的原因千奇百怪&#xff0c;解決方案也不盡相同&#xff0c;所以也都沒有記錄。 但今天看到我10年寫的問題解決小文章&#xff0c;被網友收藏了&#xff0c; 感…

普中51單片機學習(EEPROM)

EEPROM IIC串行總線的組成及工作原理 I2C總線的數據傳送 數據位的有效性規定 I2C總線進行數據傳送時&#xff0c;時鐘信號為高電平期間&#xff0c;數據線上的數據必須保持穩定&#xff0c;只有在時鐘線上的信號為低電平期間&#xff0c;數據線上的高電平或低電平狀態才允許…

分享WebGL物體三維建模

界面效果 代碼結構 模型素材類似CT (Computed Tomography)&#xff0c;即電子計算機斷層掃描&#xff0c;它是利用精確準直的X線束、γ射線、超聲波等&#xff0c;與靈敏度極高的探測器一同圍繞物體的某一部位作一個接一個的斷面掃描。 坐標系統 渲染流程 渲染流程是個將之前準…

Sora:OpenAI引領AI視頻新時代

Sora - 探索AI視頻模型的無限可能 隨著人工智能技術的飛速發展&#xff0c;AI視頻模型已成為科技領域的新熱點。而在這個浪潮中&#xff0c;OpenAI推出的首個AI視頻模型Sora&#xff0c;以其卓越的性能和前瞻性的技術&#xff0c;引領著AI視頻領域的創新發展。讓我們將一起探討…

C++(12) 模板類、模板繼承(嚴格模式和自由模式)

文章目錄 模版類1. 模版類2. 模版參數限制3. 模版繼承3.1 嚴格模式3.2 自由模式 4. 模版類的模版函數5. 返回值類型帶有模版 模版類 1. 模版類 #include <iostream>using namespace std;/* 當前 Person 類型&#xff0c;聲明了連個模版分別對應NameType 模版類型&#…

C++ array容器用法詳解

array 容器是 C++ 11 標準中新增的序列容器,簡單地理解,它就是在 C++ 普通數組的基礎上,添加了一些成員函數和全局函數。在使用上,它比普通數組更安全(原因后續會講),且效率并沒有因此變差。 和其它容器不同,array 容器的大小是固定的,無法動態的擴展或收縮,這也就意…

【SpringCloud】使用 Spring Cloud Alibaba 之 Sentinel 實現微服務的限流、降級、熔斷

目錄 一、Sentinel 介紹1.1 什么是 Sentinel1.2 Sentinel 特性1.3 限流、降級與熔斷的區別 二、實戰演示2.1 下載啟動 Sentinel 控制臺2.2 后端微服務接入 Sentinel 控制臺2.2.1 引入 Sentinel 依賴2.2.2 添加 Sentinel 連接配置 2.3 使用 Sentinel 進行流控&#xff08;含限流…

SLAM ORB-SLAM2(19)特征點三角化

SLAM ORB-SLAM2(19)特征點三角化 1. 前言2. 初始化參數3. 計算投影矩陣4. 恢復三維點4.1. 計算推導4.2. Triangulate5. 檢查三維點5.1. 檢查三維點的深度值和視差角5.2. 檢查空間點的重投影誤差6. 最后處理1. 前言 在 《SLAM ORB-SLAM2(12)估算運動并初始地圖點》 中了解到…

如何將cocos2d-x js打包部署到ios上 Mac M1系統

項目環境 cocos2d-x 3.13 xcode 12 mac m1 big sur 先找到你的項目 使用xcode軟件打開上面這個文件 打開后應該是這個樣子 執行編譯運行就好了 可能會碰到的錯誤 在xcode11版本以上都會有這個錯誤&#xff0c;這是因為iOS11廢棄了system。 將上面代碼修改為 #if (CC_TARGE…

Java 面向對象進階 16 接口的細節:成員特點和接口的各種關系(黑馬)

成員變量默認修飾符是public static final的原因是&#xff1a; Java中接口中成員變量默認修飾符是public static final的原因是為了確保接口的成員變量都是公共的、靜態的和不可修改的。 - public修飾符確保了接口的成員變量可以在任何地方被訪問到。 - static修飾符使得接口…