bzoj1208(set或splay,改天用它练splay的模板)

来源:互联网 发布:中电大数据 张振兴 编辑:程序博客网 时间:2024/06/06 03:45

就是一个set的运用,同时熟悉了一下set的用法

 

这里介绍一下lower_bound

lowe_bound在有序数组中二分查找,大于等于它最小的数位置1

通过--来找小于它的第一个数

做这道题时也意识到:做完觉得对,肯定会有bug的,要以一种思考本质的方式审视自己的思路

很有可能存在小的问题所以做完不要忙着交,检查检查再检查,让它成为习惯,一致于考场的发挥以免失误

 

#include<cstdio>#include<cstring>#include<algorithm>#include<set>#define mod 1000000using namespace std;const int inf=0x3f3f3f3f;set<int> s;set<int>::iterator it=s.begin();//iterator的用法好重要int n;int main(){scanf("%d",&n);int x,y,k=0,l,r;int ans=0;s.insert(inf);s.insert(-inf);//通过加无穷大无穷小来使运算更方便for (int i=1;i<=n;i++){scanf("%d%d",&x,&y);if (s.size()==2) k=x;if (x==k)s.insert(y);else{r=*s.lower_bound(y);//lower_bound后继l=*--s.lower_bound(y);//通过--来找前驱if (y-l<=r-y){  ans=(y-l+ans)%mod;s.erase(l);//erase删除}else ans=(r-y+ans)%mod,s.erase(r);} }printf("%d",ans);return 0; } 


 

0 0
原创粉丝点击