洛谷P4064 [JXOI2017]加法(貪心 差分)

来源:https://www.cnblogs.com/zwfymqz/archive/2019/02/27/10441302.html
-Advertisement-
Play Games

題意 "題目鏈接" Sol 這題就是一個很顯然的貪心。。。 首先二分一個答案,然後check是否可行。check的時候我們需要對每個位置$i$,維護出所有左端點在$i$左側,右端點在$i$右側的所有區間。最優策略一定是加右端點最遠的。 然後就做完了, 複雜度$O(nlogn)$ cpp includ ...


題意

題目鏈接

Sol

這題就是一個很顯然的貪心。。。

首先二分一個答案,然後check是否可行。check的時候我們需要對每個位置\(i\),維護出所有左端點在\(i\)左側,右端點在\(i\)右側的所有區間。最優策略一定是加右端點最遠的。

然後就做完了, 複雜度\(O(nlogn)\)

#include<bits/stdc++.h>
#define Fin(x) freopen(#x".in", "r", stdin);
#define LL long long 
#define int long long 
using namespace std;
const int MAXN = 1e5 + 10;
const LL INF = 1e18;
inline int read() {
    char c = getchar(); int x = 0, f = 1;
    while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
    while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
    return x * f;
}
int N, M, K, A;
vector<int> v[MAXN];
LL a[MAXN], b[MAXN];
bool check(int mid) {
    memset(b, 0, sizeof(b));
    priority_queue<int> q;
    int tag = 0, num = 0;
    for(int i = 1; i <= N; i++) {
        for(auto &x : v[i]) q.push(x);
        while(!q.empty() && q.top() < i) q.pop();
        tag += b[i];
        int now = a[i] + tag;
        while(now < mid && !q.empty() && q.top() >= i) {
            b[q.top() + 1] -= A; tag += A; q.pop();
            now += A; num++;
        }
        if(now < mid || num > K) return 0;
    }
    if(num <= K) return 1;
}
void solve() {
    N = read(); M = read(); K = read(); A = read();
    for(int i = 1; i <= N; i++) a[i] = read(), v[i].clear();
    while(M--) {
        int l = read(), r = read();
        v[l].push_back(r);
    }
    int l = 0, r = INF, ans = -1;
    while(l <= r) {
        int mid = l + r >> 1;
        if(check(mid)) l = mid + 1, ans = mid;
        else r = mid - 1;
    }
    cout << ans << '\n';
}
signed main() {
    for(int T = read(); T--; solve());
    return 0;
}
/*
*/

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ├── README.md 項目介紹├── index.html 入口頁面├── build 構建腳本目錄│ ├── webpack.base.conf.js webpack基礎配置,開發環境,生產環境都依賴 │ ├── webpack.dev.conf.js webpack開發環境配置│ ├── ...
  • 前面介紹了Util是如何封裝以降低Angular應用的開發成本。 現在把關註點移到服務端,本文將介紹分層架構各構造塊及基類,並對不同層次的開發人員應如何進行業務開發提供一些建議。 Util分層架構介紹 為了控制業務邏輯複雜性,Util引入了DDD分層架構,這意味著如果你想使用DDD,Util會為你提 ...
  • 需求緣起(用一個公司的發展作為背景) 1.還是個小公司的時候,註冊用戶就20w,每天活躍用戶1w,每天最大單表數據量就1000,然後高峰期每秒併發請求最多就10,此時一個16核32G的伺服器,每秒請求支撐在2000左右,負載合理,沒有太大壓力,基本沒有宕機風險。 2.當註冊用戶達到2000W,每天活 ...
  • 一.Django的視圖函數view 一個視圖函數(類),簡稱視圖,是一個簡單的Python函數(類),它接受WEB請求並返回Web響應. 響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片. 無論視圖本身包含什麼邏輯,都要返迴響應.代碼寫在哪裡也無所謂,只要它 ...
  • 本篇文章主要分析,架構師在設計系統架構時,應關心哪些關鍵要素? 一 業務場景 A公司是一家服裝公司,主要提供服裝一體化服務(服裝設計,服裝銷售,售後服務等),該公司主要通過淘寶,天貓,京東等平臺進行銷售,由於公司 良好的服裝質量,高效的服務水平和良好的信譽等,使得公司的銷售量不斷地增長,到了第五年, ...
  • 1.什麼是命名空間,官方文檔定義為: 什麼是命名空間?從廣義上來說,命名空間是一種封裝事物的方法。在很多地方都可以見到這種抽象概念。例如,在操作系統中目錄用來將相關文件分組,對於目錄中的文件來說,它就扮演了命名空間的角色。具體舉個例子,文件 foo.txt 可以同時在目錄/home/greg 和 / ...
  • 摘要 之前老是聽說動態代理,一直沒有機會好好看過,現在就把動態代理的實現邏輯和用處整理一下。首先提兩個概念,委托類和代理類。委托類就是實際業務邏輯的處理者,代理類是處於請求發起者與委托類之間的角色,所有對委托類的請求都會經過代理類。就是委托類將請求處理委托給代理類,代理類可以起到方法攔截、功能增強的 ...
  • 一、背景 程式的定義:程式=數據+演算法+介面 二、常用技巧 技巧1 - 按目標設計介面做冪等設計 - 場景 背景:做任務賺積分。前端發出增加積分請求,如果收不到響應會重試。 後臺開發人員:怎麼判斷是重試還是另一次請求? 解決方案:介面定義中需要傳入原來積分是多少,增加到多少。開發人員直接將目標結果入 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...