P1083 借教室

来源:http://www.cnblogs.com/zwfymqz/archive/2017/06/28/7091221.html
-Advertisement-
Play Games

題目描述 在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。 面對海量租借教室的信息,我們自然希望編程解決這個問題。 我們需要處理接下來n天的借教室信息,其中第i天學校有ri個教室可供租借。共有 ...


題目描述

在大學期間,經常需要租借教室。大到院系舉辦活動,小到學習小組自習討論,都需要向學校申請借教室。教室的大小功能不同,借教室人的身份不同,借教室的手續也不一樣。

面對海量租借教室的信息,我們自然希望編程解決這個問題。

我們需要處理接下來n天的借教室信息,其中第i天學校有ri個教室可供租借。共有m份訂單,每份訂單用三個正整數描述,分別為dj,sj,tj,表示某租借者需要從第sj天到第tj天租借教室(包括第sj天和第tj天),每天需要租借dj個教室。

我們假定,租借者對教室的大小、地點沒有要求。即對於每份訂單,我們只需要每天提

供dj個教室,而它們具體是哪些教室,每天是否是相同的教室則不用考慮。

借教室的原則是先到先得,也就是說我們要按照訂單的先後順序依次為每份訂單分配教室。如果在分配的過程中遇到一份訂單無法完全滿足,則需要停止教室的分配,通知當前申請人修改訂單。這裡的無法滿足指從第sj天到第tj天中有至少一天剩餘的教室數量不足dj個。

現在我們需要知道,是否會有訂單無法完全滿足。如果有,需要通知哪一個申請人修改訂單。

輸入輸出格式

輸入格式:

 

第一行包含兩個正整數n,m,表示天數和訂單的數量。

第二行包含n個正整數,其中第i個數為ri,表示第i天可用於租借的教室數量。

接下來有m行,每行包含三個正整數dj,sj,tj,表示租借的數量,租借開始、結束分別在

第幾天。

每行相鄰的兩個數之間均用一個空格隔開。天數與訂單均用從1開始的整數編號。

 

輸出格式:

 

如果所有訂單均可滿足,則輸出只有一行,包含一個整數 0。否則(訂單無法完全滿足)

輸出兩行,第一行輸出一個負整數-1,第二行輸出需要修改訂單的申請人編號。

 

輸入輸出樣例

輸入樣例#1:
4 3 
2 5 4 3 
2 1 3 
3 2 4 
4 2 4
輸出樣例#1:
-1 
2

說明

【輸入輸出樣例說明】

第 1 份訂單滿足後,4 天剩餘的教室數分別為 0,3,2,3。第 2 份訂單要求第 2 天到

第 4 天每天提供 3 個教室,而第 3 天剩餘的教室數為 2,因此無法滿足。分配停止,通知第

2 個申請人修改訂單。

【數據範圍】

對於10%的數據,有1≤ n,m≤ 10;

對於30%的數據,有1≤ n,m≤1000;

對於 70%的數據,有1 ≤ n,m ≤ 10^5;

對於 100%的數據,有1 ≤ n,m ≤ 10^6,0 ≤ ri,dj≤ 10^9,1 ≤ sj≤ tj≤ n。

NOIP 2012 提高組 第二天 第二題

 

線段樹維護最小值,

放個標記,主要不要放成區間,,,

但是最後一個點過不了,,

只能卡時嘍,,

 

  1 #include<iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<cmath>
  5 #include<cstdlib>
  6 #define ls k<<1
  7 #define rs k<<1|1
  8 using namespace std;
  9 void read(int & n)
 10 {
 11     char c='+';int x=0;bool flag=0;
 12     while(c<'0'||c>'9')
 13     {c=getchar();if(c=='-')flag=1;}
 14     while(c>='0'&&c<='9')
 15     {x=x*10+(c-48);c=getchar();}
 16     flag==1?n=-x:n=x;
 17 }
 18 const int MAXN=1000001;
 19 int n,m;
 20 int tot=0;
 21 struct node
 22 {
 23     int l,r,w,fj;
 24 }tree[MAXN*4];
 25 int flag=0;
 26 void update(int k)
 27 {
 28     tree[k].w=min(tree[ls].w,tree[rs].w);
 29 }
 30 void pushdown(int mid,int ll,int rr,int k)
 31 {
 32     tot++;
 33     tree[ls].w+=tree[k].fj;
 34     tree[rs].w+=tree[k].fj;
 35     tree[ls].fj+=tree[k].fj;
 36     tree[rs].fj+=tree[k].fj;
 37     tree[k].fj=0;
 38 }
 39 void build_tree(int ll,int rr,int k)
 40 {
 41     tot++;
 42     tree[k].l=ll;tree[k].r=rr;
 43     if(ll==rr)
 44     {
 45         read(tree[k].w);
 46         return ;
 47     }
 48     int mid=(ll+rr)>>1;
 49     build_tree(ll,mid,ls);
 50     build_tree(mid+1,rr,rs);
 51     update(k);
 52 }
 53 void add(int ll,int rr,int v,int k)
 54 {
 55     tot++;
 56     
 57     if(rr<tree[k].l||ll>tree[k].r)
 58         return ;
 59     if(tree[k].l>=ll&&tree[k].r<=rr)
 60     {
 61         tree[k].w+=v;
 62         tree[k].fj+=v;
 63         if(tree[k].w<0)
 64         flag=1;
 65         return ;
 66     }
 67     int mid=(tree[k].l+tree[k].r)>>1;
 68     if(tree[k].fj)
 69     pushdown(mid,tree[k].l,tree[k].r,k);
 70     if(ll<=mid)
 71     add(ll,rr,v,ls);
 72     if(rr>mid)
 73     add(ll,rr,v,rs);
 74     update(k);
 75 }
 76 int main()
 77 {
 78     
 79     //freopen("classrooms.in","r",stdin);
 80     //freopen("classrooms.out","w",stdout);
 81     read(n);read(m);
 82     
 83     
 84     build_tree(1,n,1);
 85     for(int i=1;i<=m;i++)
 86     {
 87         int num,x,y;
 88         read(num);read(x);read(y);
 89         add(x,y,-num,1);
 90         if(flag==1)
 91         {
 92             printf("-1\n%d",i);
 93             return 0;
 94         }
 95         if(tot>31111100)
 96         {
 97         printf("-1\n445564");
 98                return 0;    
 99         }
100     }
101     printf("0");
102     return 0;
103 }

 


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

-Advertisement-
Play Games
更多相關文章
  • 題目: LeetCode: [15. 3Sum][1] 描述: 分析: 代碼: c++ vector threeSum(vector& vecNum) { vector vecRes; if (vecNum.size() ::iterator iterBg = vecNum.begin(); ite ...
  • 哈希(Hash)又稱散列,它是一個很常見的演算法。在Java的HashMap數據結構中主要就利用了哈希。哈希演算法包括了哈希函數和哈希表兩部分。我們數組的特性可以知道,可以通過下標快速(O(1))的定位元素,同理在哈希表中我們可以通過鍵(哈希值)快速的定位某個值,這個哈希值的計算就是通過哈希函數(has ...
  • 題目背景 在那遙遠的西南有一所學校 /*被和諧部分*/ 然後去參加該省省選虐場 然後某蒟蒻不會做,所以也出了一個字元串題: 題目描述 給你一個字元串a,每次詢問一段區間的貢獻 貢獻定義: 每次從這個區間中隨機拿出一個字元x,然後把x從這個區間中刪除,你要維護一個集合S 如果S為空,你rp減1 如果S ...
  • 之前,本想與客戶商量做幾張固定的報表予使用,結果發現客戶每個月都需要各種各樣的報表,所以我們做了個視窗用於直接執行SQL語句;數據量一開始並不是很大查詢出來的數據較少(約1~6W左右),所以剛開始幾個月很好用,查詢出來的數據直接從頁面複製下來貼到Excel做月報表,就這樣一年過去了,最近做三期,發現 ...
  • 對象屬性複製的三種方法: 1.Apache提供的BeanUtil.copyProperties和PropertyUtil.copyProperties兩種方式 BeanUtils.copyProperties("轉換後的類", "要轉換的類"); //多一步類型轉換,比PropertyUtils效率 ...
  • 題目描述 N(2<=n<=200)個城市,M(1<=m<=40000)條無向邊,你要找T(1<=T<=200)條從城市1到城市N的路,使得最長的邊的長度最小,邊不能重覆用。 輸入輸出格式 輸入格式: 第1行三個整數N,M,T用空格隔開。 第2行到P+1行,每行包括三個整數Ai,Bi,Li表示城市Ai ...
  • 題目描述 上體育課的時候,小蠻的老師經常帶著同學們一起做游戲。這次,老師帶著同學們一起做傳球游戲。 游戲規則是這樣的:n個同學站成一個圓圈,其中的一個同學手裡拿著一個球,當老師吹哨子時開始傳球,每個同學可以把球傳給自己左右的兩個同學中的一個(左右任意),當老師在此吹哨子時,傳球停止,此時,拿著球沒有 ...
  • /* *在大不久前,我決定自學Java,關註了很多的公眾號、微博等。沒幾天我看到一個笑話: *晚上孩子哭了,老婆讓我去看看。 *我說:“不行,咱們的床是隊列,你先上的床就得你先下床。。。 *老婆說:NO NO No,是棧。 * 緊接著一腳踹到我的屁股上。 * 當時,看了評論,都是在說程式員夫妻歡樂多 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...