سوال ۳
شرکت «بساز و بنداز» به تازگی پروژهی رنگآمیزی دیوار بزرگ شهر را انجام دادهاست و آقای مهندس در حال جمعآوری دادههای این پروژه است تا عملکرد شرکت خود را در این پروژه بسنجد. اگر دیوار بزرگ شهر را به صورت $n$ قسمت مساوی پشتسرهم در نظر بگیریم، یک داده به صورت $t\ l\ r\ c$ به این معنی است که در زمان t، رنگ قسمتهای $l$ام تا $r$ام دیوار با رنگ $c$، رنگآمیزی میشود. در حین جمعآوری دادهها سوالهایی به این شکل برای آقای مهندس پیش میآید: «دیوار $i$ام در زمان $t$ به چه رنگی بوده است؟» دقت کنید که آقای مهندس دادهها را بر حسب زمانشان جمعآوری نمیکند. یعنی امکان دارد دادهها بر حسب زمان مرتب نباشند و آقای مهندس سوالها را با توجه به دادههایی که تا قبل از پیشآمدن این سوال جمعآوری کرده، پاسخ میدهد.
حال شما باید برنامهای بنویسید که با گرفتن دادههای مربوط به رنگآمیزی و سوالهای آقای مهندس، پاسخ سوالهای آقای مهندس را در خروجی چاپ کند.
رنگ همهی قسمتهای دیوار در ابتدای کار $0$ است. بنابراین اگر با دادههای جمعآوری شده رنگ خانهی سوال پرسیدهشده معلوم نشود، پاسخ سوال $0$ است.
ورودی
- در سطر اول ورودی دو عدد طبیعی $n$، تعداد قسمتهای دیوار، و $q$، تعداد دادهها و پرسشها، آمده است. در هر کدام از $q$ سطر بعدی، یا یک داده در مورد رنگآمیزی دیوار و یا یک پرسش آمده است.
- داده رنگآمیزی: «$t\ l\ r\ c$ ~»: دیوار $l$ام تا $r$ام دیوار در زمان $t$ به رنگ $c$، رنگآمیزی میشود.
- پرسش: «$t\ x$ ?»: دیوار $x$ام در زمان $t$ با استفاده از اطلاعات کنونی، به چه رنگی است؟
- تمامی زمانهایی که در ورودی آمده است متمایزند.
- $2 \leq n, q \leq 10^5$
- $1 \leq l \leq r \leq n$
- تمامی اعداد ورودی بین $1$ تا $10^9$ هستند.
خروجی
سطر $i$ام خروجی پاسخ پرسش $i$ام آقای مهندس است.
زیرمسئلهها
- زیرمسئله اول (۵ نمره): $n, q \leq 5000$
- زیرمسئله دوم (۱۰ نمره): $q \leq 5000$
- زیرمسئله سوم (۱۵ نمره): طول بازهها حداکثر $50$ است. یعنی برای تمام دادهها $r − l \leq 50$
- زیرمسئله چهارم (۲۰ نمره): $n \leq 10000$
- زیرمسئله پنجم (۵۰ نمره): بدون محدودیت اضافی
محدودیتها
- محدودیت زمان: ۳ ثانیه
- محدودیت حافظه: ۲۵۶ مگابایت
ورودی و خروجی نمونه
| ورودی نمونه | خروجی نمونه |
|---|---|
| 4 6 ? 2 1 ~ 1 1 3 1 ? 3 1 ~ 5 2 4 2 ? 4 2 ? 6 2 | 0 1 1 2 |
راهنمایی
اگر سوال این است که «در زمان t، خانه x چه رنگی بوده؟»، باید در میان تمام رنگآمیزیهایی که خانه x را شامل میشدند و زمانشان کمتر از t بوده، آن رنگآمیزیای را پیدا کنیم که بیشترین زمان ممکن (کمتر از t) را دارد.
راهنمایی
از آنجا که باید برای هر پرسش به سرعت آخرین تغییر رنگ قبل از زمان t را پیدا کنید، نیاز به ساختاری دارید که بتواند در بین تغییرات، بزرگترین زمان ≤ t را سریع پیدا کند. برای مثال، نگهداری تغییرات در یک Set بر اساس زمان برای هر بازه یا خانه میتواند ایده خوبی باشد.
راهنمایی
اگر بخواهید برای هر رنگآمیزی تمام خانهها را بهروزرسانی کنید، زمان کافی نخواهید داشت. بهتر است از ساختارهایی استفاده کنید که به شما اجازه دهند تغییرات را روی بازهها بهصورت سریع (مثلاً در زمان لگاریتمی) اعمال و بازیابی کنید؛ مثلا Segment Tree.