题意
构造出一个长度为n的序列,满足m个限制条件,链接:每个限制有l,r,x,y四个参数,表示在区间[l,r]内x出现次数不少于y次,其中任意两个限制的x不同。
思路
事实上贪心即可,优先处理r最小的即可,因为所有限制的x均不相同,显然这样可以使该限制的“危机”最小。
代码
struct dd
{
int l, r, x, y;
friend bool operator <(const dd& a, const dd& b)
{
return a.r < b.r;
}
};
const int N = 2e3 + 10;
vector<dd> dd_queue;
int n, m, a[N];
int main(void)
{
cin >> n >> m;
while (m--)
{
dd temp;
cin >> temp.l >> temp.r >> temp.x >> temp.y;
dd_queue.push_back(temp);
}
sort(dd_queue.begin(), dd_queue.end());
for (dd x : dd_queue)
{
int cnt = 0;
for (int i = x.l; i <= x.r && cnt < x.y; ++i)
{
if (!a[i])
{
a[i] = x.x;
++cnt;
}
}
if (cnt != x.y) return cout << "qcjjddw", 0;
}
for (int i = 1; i <= n; ++i) cout << (a[i] ? a[i] : 1) << ' ';
return 0;
}