标签:tmp basicSet set int AW136 second ans 邻值 first
注意点:
- 由贪心可知,仅需要从较大值和较小值中选择,delta相同时优先选择较小值即可.
#include<cstdio> #include<iostream> #include<set> #include<algorithm> using namespace std; const int INF=2e9; set<pair<int,int> > basicSet;//数值存储器 int main(){ int n; scanf("%d",&n); int val1;//第一个值 scanf("%d",&val1); basicSet.insert(make_pair(val1,1)); for(int i=2;i<=n;i++){ int tmp; scanf("%d",&tmp); basicSet.insert(make_pair(tmp,i)); //获取最小值j,选择A_j较小的那个 //输出最小值点 set<pair<int,int> >::iterator it=basicSet.find(make_pair(tmp,i));//获取迭代器 pair<int,int> ans;//答案(first:差值 second:位置) ans.first=INF; if(++it!=basicSet.end()){ ans.first=(*it).first-tmp; ans.second=(*it).second; } it=basicSet.find(make_pair(tmp,i));//重置迭代器 //使用迭代器获得前面的较好值 if(it--!=basicSet.begin()&&ans.first>=tmp-(*it).first){//能更新 ans.first=tmp-(*it).first; ans.second=(*it).second; } //输出答案 printf("%d %d\n",ans.first,ans.second); } return 0; }
标签:tmp,basicSet,set,int,AW136,second,ans,邻值,first 来源: https://www.cnblogs.com/zbsy-wwx/p/11722051.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。