リンク:https://ac.nowcoder.com/acm/contest/4462/H
出典:ネットワーク牛オフ
タイトル説明
1からnまでの番号n個の倉庫でのビジネスプラットフォーム、。
ときに、特定の商品の購入には、貨物事業では、いくつかの隣接する倉庫の数に分散されます。
あなたは数がどのくらいある物品の倉庫保管の、すべての商品の購入が完了すると、ほとんどの種類を知っていれば我々は、販売することを考えていませんか?
説明を入力します。
2つの正の整数は最初の行に示されている
、N-、M、1≦Nm≤10 5。回、及び倉庫の在庫数を表します。
3つの正の整数の次のmライン
Lは、R、D、1≦L、r≤n、1≤d≤10 。9 。LとRとの間の倉庫内の番号は、D商品の数に組み込まれます。
出力説明:
商品のライン出力タイプの倉庫数まで記憶され、条件、最小数の出力を満たすために複数の倉庫場合。
エントリー
5 5 1 1 1 3 3 1 2 5 2 5 5 1 4 5 1
輸出
3
タイプおよび範囲、より明白な違いは、セグメントツリーを作成することができ
1の#include <ビット/ STDC ++ H> 2のtypedef 長い 長LL。 3 CONST INT INF = 0x3f3f3f3f 。 4つの CONST ダブル EPS = 1E- 8 。 5 CONST INT MOD = 1E9 + 7 。 6 CONST INT MAXN = 1E5 + 10 。 7 使用して 名前空間はstdを、 8 9ベクトル< INT > ST [MAXN]編[MAXN]。 10マップ< int型、int型 > 融点; 11 12 のint main()の 13 { 14 の#ifdefデバッグ 15 freopenは(" SAMPLE.TXT "、" R " 、STDIN)。 16 #endifの 17 18 整数N、M。 19 のscanf(" %D%D "、&N、&M)。 20 のために(INT iは= 1 ; iが<= M; I ++ ) 21 { 22 のint L、R、D。 23 のscanf(" %D%D%D "、&L&R&D); 24 ST [L] .push_back(D)。 25 編[R + 1 ] .push_back(D)。 26 } 27 int型のID; 28 INT MAX = 0 。 29 INT NUM = 0 。 30 のために(INT iは= 1 ; iが<= N; I ++ ) 31 { 32 のための(自動これ:ST [I]) 33 { 34 であれば(MP [それ] == 0)NUM ++ 。 35 MP [それ] ++ ; 36 } 37 のための(自動これ:ED [I]) 38 { 39 MP [それ] - 。 40 であれば(MP [それ] == 0)num-- 。 41 } 42 であれば(MAX < NUM) 43 { 44 MAX = NUM。 45 IDは= Iと、 46 } 47 } 48 のprintf(" %dの\ n " 、ID)。 49 50 リターン 0 ; 51 }
もう一つの方法:
1の#include <ビット/ STDC ++ H> 2のtypedef 長い 長LL。 3 CONST INT INF = 0x3f3f3f3f 。 4つの CONST ダブル EPS = 1E- 8 。 5 CONST INT MOD = 1E9 + 7 。 6 CONST INT MAXN = 1E5 + 10 。 7 使用して 名前空間はstdを、 8 9ベクトル<ペア< 整数、整数 >> VT [MAXN]。 10 セット < 整数 >ST; 11マルチセット< 整数 > SST; 12 13 のint main()の 14 { 15 の#ifdefデバッグ 16 freopenは(" SAMPLE.TXT "、" R " 、STDIN)。 17 #endifの 18 19 整数N、M。 20 のscanf(" %D%D "、&N、&M)。 21 のために(INT iは= 1 ; iが<= M; I ++ ) 22 { 23 のint L、R、D。 24 のscanf(" %D%D%D "、&L&R&D)。 25 VT [L] .push_back({ 1 、D})。 26 VT [R + 1 ] .push_back({ - 1 、D})。 27 } 28 int型のID; 29 INT MAX = 0 。 30 のために(INT iは= 1 ; iが<= N; I ++ ) 31 { 32 のための(自動これ:VT [I]) 33 { 34 のint OP = it.first。 35 INTD = it.second。 36 であれば(OP == 1 ) 37 { 38 st.insert(D)。 39 sst.insert(D)。 40 } 41 そう であれば(OP == - 1 ) 42 { 43 sst.erase(sst.find(d)参照)。 44 であれば(sst.find(D)== sst.end())st.erase(D)。 45 } 46 } 47 であれば(MAX < st.size()) 48 { 49 MAX =st.size(); 50 IDは= Iと、 51 } 52 } 53 のprintf(" %dの\ n " 、ID)。 54 55 戻り 0 ; 56 }
-