POJ-2566 Bound Found(尺取法变形)
来源:互联网 发布:ubuntu selinux设置 编辑:程序博客网 时间:2024/05/16 17:59
题目链接
题意:给出n个整数和k次查询,每次查询给出一个非负整数t,要求找到区间[i,j],使[i,j]内的数之和的绝对值与t的差距最小,每次查询输出和的绝对值和区间的左右端点。
分析:首先预处理前缀和,用pair数组p保存前缀和及其对应的下标。然后对p按前缀和从小到大排序,排序后就可以用尺取法查询。
#include<iostream>#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;const int inf=0x3f3f3f3f;const int maxn=100005;int a[maxn];pair<int,int> p[maxn];int n,k;void query(int x){ int i=0,j=1,dis=inf; int ans,ansi,ansj; while(i<=n&&j<=n) { int t=p[j].first-p[i].first; if(abs(t-x)<=dis) { dis=abs(t-x); ans=t; ansi=p[i].second; ansj=p[j].second; if(ansi>ansj) swap(ansi,ansj); } if(t>x) i++; else if(t<x) j++; else break; if(i==j) j++; //注意当i=j时此时sum=0,不存在这样的情况 } printf("%d %d %d\n",ans,ansi+1,ansj);}int main(){ while(~scanf("%d%d",&n,&k)&&(n||k)) { int sum=0; p[0]=make_pair(0,0); for(int i=1;i<=n;i++) { scanf("%d",a+i); sum+=a[i]; p[i]=make_pair(sum,i); } sort(p,p+n+1); while(k--) { int t; scanf("%d",&t); query(t); } } return 0;}
0 0
- POJ-2566 Bound Found(尺取法变形)
- poj 2566 Bound Found(尺取法)
- poj 2566 Bound Found(尺取法)
- Poj 2566 Bound Found(尺取法)
- POJ 2566 Bound Found (尺取法)
- poj 2566 Bound Found (尺取法)
- POJ - 2566 Bound Found(尺取法)
- POJ 2566 BOUND FOUND 尺取法
- poj 2566 Bound Found 尺取法 / lower_bound
- POJ-2566Bound Found(尺取法)(好题)
- POJ 2566 Bound Found(前缀和排序 + 尺取法)
- POJ - 2566 Bound Found(尺取法+排序)
- POJ 2566 · Bound Found【尺取法】【读题】
- Bound Found(POJ-2566)(尺取法 and 前缀和)
- PJ 2566 Bound Found (尺取法)
- POJ2566:Bound Found(尺取法)
- POJ2566--Bound Found(尺取法)
- POJ2566-Bound Found【尺取法】
- Android中EditTex焦点设置和弹不弹出输入法的问题
- ionic入门教程第十九课-ionic路由详解(state、route、resolve)
- 获取指定时间时间戳
- linux 下火狐浏览器不能播放flash 的解决办法
- linux 下火狐浏览器不能播放flash 的解决办法
- POJ-2566 Bound Found(尺取法变形)
- java中通用的数据库连接与关闭方法类的简单写法
- 发送消息-群发消息,边看边打字。。
- [AHK]获取文华财经的成交记录到剪贴板
- ionic入门教程第二十课-在微信中使用ionic的解决方案(开源框架)
- Condition的await-signal流程详解
- 天弘基金主要靠什么来赚钱!
- Android Studio Plugin is too old
- 设计模式-桥接模式