Panasonic Programming Contest 2021(AtCoder Beginner Contest 231) F Jealous Two
已知问题
1.第一次看题的时候以为可以给任意一人送任意个礼物,且礼物可以重复送,想不出解法。
2.没有注意到N*A[i]=10^14,那么必须开long long才能统计下来。
题解
题目要求对于A的每一个喜欢的礼物,对于B来说都有一些比这些礼物更好的礼物,但是这些B喜欢的礼物里,只能给B送A没有那么喜欢的。
设礼物的两个维度分别为a[i]和b[i](对a[i]从小到大排序),那么对于每一个a[i],显然对小A来说,这个礼物之前的礼物都"没有那么喜欢"。
那么,对于小B呢?小B也有一样的要求,问题是候选的礼物里只有小A同意了才能送给小B。换句话讲,小B只能从"小A没那么喜欢"的礼物堆里挑礼物。
而在这个礼物堆中,只能送那些b[j]>=b[i]的给小B。换句话讲,就转化成了动态求逆序对问题。
就用树状数组统计就行。(首先要离散化)
#includeTRANSLATE with#include #include #include
Arabic | Hebrew | Polish |
Bulgarian | Hindi | Portuguese |
Catalan | Hmong Daw | Romanian |
Chinese Simplified | Hungarian | Russian |
Chinese Traditional | Indonesian | Slovak |
Czech | Italian | Slovenian |
Danish | Japanese | Spanish |
Dutch | Klingon | Swedish |
English | Korean | Thai |
Estonian | Latvian | Turkish |
Finnish | Lithuanian | Ukrainian |
French | Malay | Urdu |
German | Maltese | Vietnamese |
Greek | Norwegian | Welsh |
Haitian Creole | Persian |