1. 题目
2. 题解
又用 STL 水了一题。。。
呜呼!造孽啊!
代码:
#include <bits/stdc++.h>
using namespace std;
template<typename _Tp>inline void IN(_Tp&dig)
{
char c;bool flag=0;dig=0;
while(c=getchar(),!isdigit(c))if(c=='-')flag=1;
while(isdigit(c))dig=dig*10+c-'0',c=getchar();
if(flag)dig=-dig;
}
int n,ans,opt,k;
multiset<int> t[2];
int main()
{
IN(n);
while(n--)
{
IN(opt),IN(k);
if(t[!opt].empty())t[opt].insert(k);
else
{
int j=INT_MAX,l=0;
multiset<int>::iterator i=t[!opt].insert(k),tmp;
if(tmp=i,tmp!=t[!opt].begin())if(tmp--,j>k-*tmp)l=0,j=k-*tmp;
if(tmp=i,++tmp!=t[!opt].end())if(j>*tmp-k)l=1,j=*tmp-k;
if(ans=(ans+j)%1000000,l)t[!opt].erase(++i);
else t[!opt].erase(--i);
t[!opt].erase(t[!opt].lower_bound(k));
}
}
printf("%d\n",ans);
return 0;
}
0 条评论