#include #include #include #include struct E{ int i,o; bool operator<(const E& e1)const{ if(o!=e1.o)return o>e1.o;//チェックアウトが速い順に取り出す return i pq; std::map ms;//客のチェックアウト時刻を記録する(同じ時刻に何人いるかもチェック) int n,m; scanf("%d %d",&n,&m); for(int i=0;ie1.o){ printf("err\n"); } //std::cout<::iterator it=ms.begin(); //e1より早くチェックアウトする客の予約を確定し答えに集計する while((it!=ms.end())&&((*it).first=n){ //部屋数より //部屋に割り当てた予約数が多くなったらチェックアウトが一番遅い客を一人削除する ms[e1.o]++; it=ms.end(); it--; //一人削除 (*it).second--; if((*it).second<1){ ms.erase(it); } }else{ //部屋数より部屋に割り当てた予約数が少ないのでそのまま部屋に割り当てる count++; ms[e1.o]++; } } ans+=count; printf("%d\n",ans); }