トピックリンク
https://pintia.cn/problem-sets/994805046380707840/problems/994805063166312448
アイデア
実際、この質問は、何を求めるべきか混乱している人々に非常に簡単に尋ねることができます。つまり、最小数のトラックが必要であり、このトラックはワイヤレス測定車に配置できますが、車は順番にトラックに入ります、私たちは私たちから始める必要があります割り当てられたトラックでは、これらの車は確立されたトラックである降順で出口から出ることができます。
たとえば、ここでは4つのトラックに分かれています。
轨道1: 1 2 4 8
轨道2: 3 5
轨道3: 6 9
轨道4: 7
このように、車両が出て行くときは、降順で出力を降順の効果を得ることができます。実際には、降順のサブシーケンスを分割する必要があります。貪欲に考えることができます。現在の車両の数がそれより多い場合すべてのトラックの中で最も小さい番号の車の方が大きいので、この車は別のトラックを運転する必要があります。そうしないと、現在の車が最も近い番号の後ろに配置されるため、すでにトラックがある場合は、ここで注意する必要があります。最初のトラック88現在の車が44の場合は84ここ88で8は実際には役に立たないので、直接使用できます444それを交換します。最後に、このセットの要素数を出力するだけで済みます。set
でバイナリて検索を高速化検索
コード
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f
const int N = 1e5+10;
int n,a[N];
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n;
set<int> S;
for(int i = 1;i <= n; ++i) {
cin>>a[i];
auto it = S.lower_bound(a[i]);
if(it == S.end()) S.insert(a[i]);
else {
S.erase(it);
S.insert(a[i]);
}
}
cout<<S.size()<<endl;
return 0;
}