[Codeforces702F]T-Shirts——非旋轉treap+貪心

題目鏈接:

Codeforces702F

題目大意:有$n$種T恤,每種有一個價格$c_{i}$和品質$q_{i}$且每種數量無限。現在有$m$個人,第$i$個人有$v_{i}$元,每人每次會買他能買得起的品質最高的一件T恤(當兩件T恤品質相同時優先買價格低的),每人只能買一件每種T恤。求最后每個人買的T恤件數。

暴力的方法是將T恤品質從大到小排序,對于每個人從第一種T恤(排序后的第一種)開始模擬每件T恤,能買就買,不能買就跳過。

發現暴力的方法是對于每個人決策每件T恤,我們可以對于每件T恤來決策哪些人能買,用非旋轉$treap$來維護每個人還剩的錢數。

那么每次就是將權值大于$q_{i}$的人的權值都減少$q_{i}$并把答案都增加$1$。

對于區間修改我們直接打標記即可,但問題是無法將被修改的部分和沒被修改的部分合并。

因為非旋轉$treap$的合并要求一棵樹的最大權值小于另一棵樹的最小權值,而被修改部分在權值減小之后會有一部分的權值比未被修改部分最大權值小。

那么我們就把這部分暴力插入到未被修改的那棵樹中,剩下被修改的那部分直接合并。

假設被暴力插入的權值為$x$,那么$x-q_{i}<q_{i},x>=q_{i}$,也就是說$2q_{i}>x,q_{i}>\frac{x}{2}$,即每次暴力插入的數權值減半,所以每個數最多暴力插入$log_{v_{i}}$次。

總時間復雜度是$O((n+\sum log_{v_{i}})log_{m})$。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int ls[200010];
int rs[200010];
int val[200010];
int num[200010];
int r[200010];
int sum[200010];
int tag[200010];
int res[200010];
int root;
int n,m,x;
int cnt;
int a,b,c,d;
int L,R;
struct lty
{int c,v;
}q[200010];
queue<int>Q;
inline int build(int v)
{int rt=++cnt;r[rt]=rand();val[rt]=v;return rt;
}
inline void add(int rt,int x,int y)
{tag[rt]+=x;val[rt]+=x;sum[rt]+=y;res[rt]+=y;
}
inline void pushdown(int rt)
{if(tag[rt]&&sum[rt]){add(ls[rt],tag[rt],sum[rt]);add(rs[rt],tag[rt],sum[rt]);tag[rt]=sum[rt]=0;}
}
inline int merge(int x,int y)
{if(!x||!y){return x+y;}pushdown(x);pushdown(y);if(r[x]<r[y]){rs[x]=merge(rs[x],y);return x;}else{ls[y]=merge(x,ls[y]);return y;}
}
inline void split(int rt,int &x,int &y,int k)
{if(!rt){x=y=0;return ;}pushdown(rt);if(val[rt]>=k){y=rt;split(ls[rt],x,ls[y],k);}else{x=rt;split(rs[rt],rs[x],y,k);}
}
inline bool cmp(lty a,lty b)
{return a.v==b.v?a.c<b.c:a.v>b.v;
}
inline void dfs(int rt)
{pushdown(rt);if(ls[rt]){dfs(ls[rt]);}if(rs[rt]){dfs(rs[rt]);}
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d%d",&q[i].c,&q[i].v);}sort(q+1,q+1+n,cmp);scanf("%d",&m);for(int i=1;i<=m;i++){scanf("%d",&x);split(root,a,b,x);root=merge(merge(a,build(x)),b);}for(int i=1;i<=n;i++){split(root,a,b,q[i].c);split(b,b,c,2*q[i].c);add(b,-q[i].c,1);add(c,-q[i].c,1);Q.push(b);while(!Q.empty()){int now=Q.front();Q.pop();pushdown(now);if(ls[now]){Q.push(ls[now]);}if(rs[now]){Q.push(rs[now]);}ls[now]=rs[now]=0;split(a,a,d,val[now]);a=merge(merge(a,now),d);}root=merge(a,c);}dfs(root);for(int i=1;i<=m;i++){printf("%d ",res[i]);}
}

轉載于:https://www.cnblogs.com/Khada-Jhin/p/10697330.html

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

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

相關文章

js高級第二天

構造函數和原型 構造函數和原型 在典型的OOP 的語言中&#xff08;如Java&#xff09;&#xff0c;都存在類的概念&#xff0c;類就是對象的模板&#xff0c;對象就是類的實例&#xff0c;但在ES6之前&#xff0c;JS 中并沒用引入類的概念。ES6&#xff0c;全稱ECMAScript6.0…

操作系統原理之文件系統(第五章)

一、文件 1、?件系統的?戶接?包括?件的命名、類型、屬性和對?件的操作 2、?件命名&#xff1a;所有操作系統都允許?1&#xff5e;8個字?組成的字符串 3、?件擴展名&#xff1a;多數操作系統都?持?件名?圓點隔開分為兩部分&#xff0c;圓點后?的部分稱為?件擴展名…

第三次作業------52李金鎮

---恢復內容開始--- 習題1&#xff1a; **1.初始化一個數據集&#xff0c;包括5-10位同學的成績數據&#xff08;數據類型不限&#xff09;&#xff0c;數據格式如下&#xff1a; **學號 姓名 Java C語言 Python2017XXXX 小白 87 68 922017XXXX 小黃 80 76 832017XXXX 小王 75 …

js高級第三天

原型鏈 作用&#xff1a;提供一個成員的查找機制&#xff0c;或者查找規則含義&#xff1a;由原型所串聯起來的鏈裝結構JavaScript 的成員查找機制(規則) 當訪問一個對象的屬性&#xff08;包括方法&#xff09;時&#xff0c;首先查找這個對象自身有沒有該屬性。如果沒有就查…

為什么大學的計算機老師技術那么厲害,卻不愿意當程序員?

不知道大家有多少是從事跟計算機有關的工作的&#xff0c;每次想到大學時的計算機考試&#xff0c;都能令小小編心驚膽戰呀&#xff0c;各式代碼和計算機語言&#xff0c;真的是很令人頭痛了。不過呢&#xff0c;也有很多大神&#xff0c;大學學著其他的專業&#xff0c;卻在畢…

DDG全家桶之3022

本篇文章主要根據360Netlab新出的DDG分析文檔來復現新變種3022&#xff0c;會涉及部分分析和清除的方法&#xff0c;本篇文章只用于學習交流&#xff0c;為廣大受害者提供清除思路 &#xff0c;請勿用于非法用途&#xff0c;產生一切后果與作者無關 詳情請參考文檔&#xff1a;…

js高級第四天

課程回顧&#xff1a; ? 原型鏈&#xff1a;由原型構成鏈狀結構&#xff0c;提供成員查找機制 ? 繼承&#xff1a;組合繼承&#xff1a;構造函數和原型對象 ? 屬性&#xff1a;調用父構造函數的時候用call改變this指向 ? 方法&#xff1a;父實例對象賦值給子原型對象&a…

d3.js 制作簡單的俄羅斯方塊

d3.js是一個不錯的可視化框架&#xff0c;同時對于操作dom也是十分方便的。今天我們使用d3.js配合es6的類來制作一個童年小游戲--俄羅斯方塊。話不多說先上圖片。 1. js tetris類 由于方法拆分的比較細所以加上了一些備注&#xff08;這不是我的風格&#xff01;&#xff09; c…

Flask中路由系統以及藍圖的使用

一、Flask的路由系統 1.app.route()裝飾器中的參數 methods:當前URL地址&#xff0c;允許訪問的請求方式 app.route("/info", methods["GET", "POST"]) def student_info():stu_id int(request.args["id"])return f"Hello Old b…

js高級第五天

課程回顧&#xff1a; ? 原型鏈&#xff1a;由原型構成鏈狀結構&#xff0c;提供成員查找機制 ? 繼承&#xff1a;組合繼承&#xff1a;構造函數和原型對象 ? 屬性&#xff1a;調用父構造函數的時候用call改變this指向 ? 方法&#xff1a;父實例對象賦值給子原型對象&a…

d3.js 制作簡單的貪吃蛇

d3.js是一個不錯的可視化框架&#xff0c;同時對于操作dom也是十分方便的。今天我們使用d3.js配合es6的類來制作一個童年小游戲–貪吃蛇。話不多說先上圖片。 1. js snaker類 class Snaker {constructor() {this._size 30;this._len 3;this._width 900;this._height 690;th…

js高級第六天

Q課程回顧&#xff1a; ? 閉包&#xff1a;有權訪問另外一個函數的局部變量的函數&#xff0c;作用&#xff1a;延伸變量使用范圍 ? mdn&#xff0c;w3c function fn1 () {var n 3;return function () {console.log(n);} }? 遞歸&#xff1a;函數調用其本身 function f…

Chrome 75 lazy-loading

Chrome 75 & lazy-loading https://addyosmani.com/blog/lazy-loading/ https://chromestatus.com/feature/5645767347798016 Chrome 75 將默認啟用延遲加載功能 自 Chrome 75 起&#xff0c;將原生支持圖片的延遲加載&#xff0c;在代碼中編寫 <img loading"lazy&…

d3.js 實現煙花鮮果

今天在d3.js官網上看到了一個煙花的DEMO&#xff0c;是canvas制作的&#xff0c;于是我想用d3.js來實現它&#xff0c;js代碼只有幾行。好了廢話不多說&#xff0c;先上圖。 1 js 類 因為煙花要有下落的效果&#xff0c;所以里面用到了一些簡單的數學和物理知識來模擬重力&…

阿里Sentinel控制臺源碼修改-對接Apollo規則持久化

改造背景 前面我們講解了如何對接Apollo來持久化限流的規則&#xff0c;對接后可以直接通過Apollo的后臺進行規則的修改&#xff0c;推送到各個客戶端實時生效。 但還有一個問題就是Sentinel控制臺沒有對接Apollo&#xff0c;Sentinel控制臺本來就可以修改限流的規則&#xff0…

第八節:EF Core連接MySql和Sqlite數據庫

。。。 轉載于:https://www.cnblogs.com/yaopengfei/p/11507557.html

Flask--WebSocket

flask websocket websocket原理 Socket&#xff1a; FTP - 文件服務 Django Flask Http - TCP: 1.一次請求 一次響應 斷開 2.客戶端永遠處于主動狀態 3.服務器永遠處于被動狀態 4.Http無狀態 - 在服務器不保存客戶端的信息 5.服務器無法主動找到客戶端 1.輪詢 客戶端向服務器…

jQuery第一天

課程回顧&#xff1a; ? 正則&#xff1a;匹配字符組合模式; ? 創建&#xff1a;var reg1 new RegExp(/abc/); var reg2 /abc/; ? 測試&#xff1a;reg1.test(‘abc’); ? 特殊字符&#xff1a;元字符 ? 邊界符&#xff1a;^&#xff0c;$ ? 字符類&#xff1a;[…

Python學習(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安裝&#xff08;以mac 為例&#xff09; MAC 系統一般都自帶有 Python2.x版本 的環境&#xff0c;你也可以在鏈接 https://www.py…

jQuery—淘寶精品服飾案例

<body><div class"wrapper"><ul id"left"><li><a href"#">女靴</a></li><li><a href"#">雪地靴</a></li><li><a href"#">冬裙</a>&l…