poj 2566 尺取法

POJ 2566 - Bound Found - 尺取法详解(尺取法好题) Bound Found Time Limit:5000MS Memory Limit:65536K Total Submissions:8902 Accepted:2905 Special Judge Description Signals of most probably extra-terrestrial origin hav... 阅读详情
Bound Found
Time Limit: 5000MS Memory Limit: 65536K
Total Submissions: 1732 Accepted: 574 Special Judge

Description

Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronautic and Space Administration (that must be going through a defiant phase: "But I want to use feet, not meters!"). Each signal seems to come in two parts: a sequence of n integer values and a non-negative integer t. We'll not go into details, but researchers found out that a signal encodes two integer values. These can be found as the lower and upper bound of a subrange of the sequence whose absolute value of its sum is closest to t. 

You are given the sequence of n integers and the non-negative target t. You are to find a non-empty range of the sequence (i.e. a continuous subsequence) and output its lower index l and its upper index u. The absolute value of the sum of the values of the sequence from the l-th to the u-th element (inclusive) must be at least as close to t as the absolute value of the sum of any other non-empty range.

Input

The input file contains several test cases. Each test case starts with two numbers n and k. Input is terminated by n=k=0. Otherwise, 1<=n<=100000 and there follow n integers with absolute values <=10000 which constitute the sequence. Then follow k queries for this sequence. Each query is a target t with 0<=t<=1000000000.

Output

For each query output 3 numbers on a line: some closest absolute sum and the lower and upper indices of some range where this absolute sum is achieved. Possible indices start with 1 and go up to n.

Sample Input

5 1
-10 -5 0 5 10
3
10 2
-9 8 -7 6 -5 4 -3 2 -1 0
5 11
15 2
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
15 100
0 0

Sample Output

5 4 4
5 2 8
9 1 1
15 1 15
15 1 15

Source

题目是,对于给定t,求出某段连续子序列的和使得其与t的差值最小。输出该和和下标范围。也就是找出区间使得 ||Sn-Sm|-t|最小,Sn代表序列前n项和。
|Sn-Sm|应该尽可能的接近t,因为这里是取绝对值,因此n和m的大小关系可以任意。我们可以先求出前缀和,然后进行从小到大排序,对于以Si,我们要找到j>i,Sj-Si最接近t的值,用尺取法进行查找。取前后两个指针i,j。Sj-Si<t的话,因为从小到大排好序了所以令j++,使区间和不断接近t,并把出现过的最小差值记录。Sj-Si>=t或j==n时,令i++,因此此时j继续增加得到的值是单调递增的,因此必然比之前出现的差值大,所以以i为起点的可能范围已经遍历完了,取下一个起点。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>

using namespace std;

#define maxn 100005


int n, k;
int t;
int a[maxn];
struct node
{
    int val;
    int id;

    bool operator < (const node &a) const
    {
        return val < a.val;
    }
} pre[maxn];


int main()
{
    while(scanf("%d%d", &n, &k)!=EOF){
        if(n+k==0) break;
        for(int i = 1; i <= n; i++)
            scanf("%d", a+i);

        pre[0].val = 0, pre[0].id = 0;
        for(int i = 1; i <= n; i++)
            pre[i].val = pre[i-1].val+a[i], pre[i].id = i;

        sort(pre, pre+n+1);
        for(int i = 0; i < k; i++){
        scanf("%d", &t);
        int ll, rr, val, l, r;
        l = 0, r = 1, val =-(0x3f3f3f3f);
        while(l<r && r <= n){
            int sum = pre[r].val-pre[l].val;
            if(abs(sum-t) < abs(val-t)){
                val = sum;
                ll = l;
                rr = r;
            }

            if(sum>=t){
                l++;
                if(l == r)
                    r++;
            }
            else if(r == n)
                l++;
            else
                r++;
        }

        printf("%d %d %d\n", val, min(pre[ll].id, pre[rr].id)+1, max(pre[ll].id, pre[rr].id));
      }
    }
}




sentaurus学习笔记(一)器件仿真 之前有跟大家说,以后转到sentaurus,因此silvaco会用的比较少,结果发现真的有一点贪心厌旧的感觉,现在基本上不用silvaco(lll¬ω¬)故这篇文章,将为大家带来的是关于sentaurus的结构仿真和器件的特性的提取。我们还是老规矩,先上结构图。 还是一个经典的IGBT结构,这是一个典型的N型IGBT,下面我将把一些相关的结构,和具体的写法用下面一幅图表达出来。 这里因为方便看,我们把器件的比例画的比较抽象。可以看到的是,这里有很多的距离参数是用一些变量名来写的,这也是sentaurus 阅读详情

相关推荐

【SABRE 3D, SABRE 3DxT,LAM设备】2025年9月12日-生产期间维护用的双重隔离

生产期间维护用的双重隔离。该程序用于准备将一个或多个双工位设置为维护状态,同时SABRE 3D/3DxT/3D Scimitar保持生产运行。其目的是在不中断生产的情况下将双工位与运行中的设备隔离。

weixin_46735260的博客 574

POJ 2566(尺取+前缀和)

从数列中找出连续序列,使得和的绝对值与目标数之差最小 Input 多组用例,每组用例第一行两个整数n和m分别表示数列长度和查询次数,第二行为n个整数表示数列,第三行为一个整数m表示目标数,以n=k=0结束输入 0<=t<=1000000000;1<=n<=100000 Output 对于每次查询,输出三个整数sum,l,r,分别表示其绝对值与目标数之差最小的连续序列值与此连续序列的左右端点 #include <iostream> #include <.

Ghostttttttiii的博客 448

测试dali协议的软件,DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议

DALI2.0和DALI1.0完美兼容同一个模块,测试每项可过协议深圳聚积智能 夏先生 13246760327 QQ 349098308■IEC62386-102(V2.0)通过测试内容IEC62386-102/2.1/Test preambleIEC62386-102/3.1/Polarity testIEC62386-102/3.2/Maximum and minimum system v...

weixin_35343788的博客 1351

POJ 2566 Bound Found 尺取法+二分

给我们一个长度为n数列,k次查询,每次查询出数列中相邻子元素之和的绝对值最接近 t 的区间,输出区间和的绝对值,输出区间起点left和区间终点right(闭区间)

qq_53038151的博客 412

从零到一:PrimeTime静态时序分析入门指南

本文详细介绍了PrimeTime静态时序分析(STA)的入门指南,从基础概念到实际应用全面覆盖。内容包括时序路径分类、PrimeTime环境搭建、时序约束设置与验证、时序分析与报告解读等核心内容,帮助工程师快速掌握STA技术,解决数字芯片设计中的时序收敛问题。

weixin_28730131的博客 268

六款经典限流保护电路设计:从原理到实战的完整指南

在电子系统设计中,过流保护是确保电路可靠运行的基础技术。其核心原理是通过电流采样、比较与执行三个环节构成闭环控制,将不可见的电流转化为可测量的电压信号进行处理。这项技术的核心价值在于防止因短路、堵转或异常负载导致的元器件损坏,从而提升整个系统的稳定性和安全性。在电源管理、电机驱动和精密仪器等应用场景中,限流保护电路都是不可或缺的安全屏障。本文深入解析了基于运放和晶体管搭建的经典方案,并重点探讨了采样电阻选型、参考电压生成以及PCB布局中的开尔文连接等工程实践要点,帮助读者从热门的DIY项目到工业控制都能实现

weixin_29166013的博客 352

POJ【2566】Bound Found(尺取法)

题目链接:http://poj.org/problem?id=2566 分析 这道题的题意是给定一个序列和一个值t,求一个子区间使得其和的绝对值与t的差值最小,如果存在多个,任意解都可行。这道题可以采用尺取法,但是序列中有正有负,不能满足单调性,因此对序列求前缀和,然后对前缀和进行排序,这样就可以满足单调性。为什么可以对前缀和进行排序?个人理解这里需要记住每个前缀和都是从下标0开始,两个区间肯定存...

yj8023xx的博客 377

DAGGER vs 传统模仿学习:为什么数据聚合能提升模型性能?

本文深入对比了DAGGER与传统模仿学习,揭示了传统方法因“分布不匹配”导致性能下降的根源。DAGGER通过动态的**数据聚合**机制,在智能体自身策略产生的状态分布上收集专家数据,从根本上解决了误差累积问题,从而显著提升了模型在实际部署中的鲁棒性和性能。

weixin_29170327的博客 234

poj2566--Bound Found(前缀和&&尺取法)

l,r]区间和的计算是s[r]-s[l-1],因此最后输出的区间左端点应是left+1,这也是为什么当l==r时,r要加1的原因。核心(指针移动规则):如果当前维护的区间和值小于t,那么显然应当试图寻找一个和值更大一点的区间,因为前缀和序列单调增加,所以我们只需要把r指针往右移动,得到和值更大的区间。突破点:“区间和”,求的是区间和及左右边界,马上想到前缀和。cur_sum——当前区间和的绝对值,cur_dis——当前区间和的绝对值到t的距离,如果小于least_dis,则更新结果和区间端点。

m0_74639651的博客 1050

OpenClaw 开机自启配置:Windows/macOS/Linux 全平台技术指南

OpenClaw 开机自启全平台配置指南 本文提供了在Windows、macOS和Linux系统上配置OpenClaw开机自启的完整技术方案。主要内容包括: Windows配置:提供三种方法(Windows服务、任务计划程序、启动文件夹),详细说明服务脚本创建、服务注册和测试流程 macOS配置:使用LaunchAgent实现开机自启,包含配置文件创建和加载方法 Linux配置:通过systemd服务实现,包括服务单元文件创建和启用步骤 系统要求:明确硬件(64位CPU/4GB内存)和软件(各平台操作系统版

一键难忘的博客 2993

Loki 分布式日志中心服务

分布式日志中心 Loki + Promtail + Grafana

原名又逢乱世。不要放下学习的脚步,毕竟比天天打牌、钓鱼、打游戏更能从内在充实自己。 2353

Poj :2566:Bound Found 尺取法,连续序列求极值

题目大意: 给出N个数,Q个询问 要求你输出Q的询问的结果,询问的内容为,找出一个区间,区间内的数的和的绝对值要最接近所给的数 解题思路: 这种求区间和的问题,比如求一个连续区间和大于kkk且长度最短,求一个连续区间和小于kkk且长度最长,求一个连续区间和绝对值最接近kkk都很适合使用尺取法进行求解。之前写过一篇尺取法的用法,我们要解决的无非下面三个问题 1、 什么情况下能使用尺取法? 2、如何推...

csyifanZhang的博客 355

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)新增用户和用户角色权限

解决RabbitMq登录时报出Not management user(Login failed)错误以及rabbitmqctl(RabbitMq)查看用户权限、新增用户和用户角色权限。

念兮为美 7479

POJ 2566 尺取法

题意 传送门 POJ 2566 由于数列元素不单调,难以使用依次推进元素的尺取法。 考虑前缀和,升序排序后,满足 Si−Sj≥0,j<iS_{i}-S_{j}\geq 0,j<iSi​−Sj​≥0,j<i,代表所有的区间求和的绝对值。满足单调性,就可以使用尺取法处理区间了。 对于每一个查询值 ttt,只要用小于它的最大值以及大于等于它的最小值更新答案即可。但查询值会出现 000,...

neweryyy的博客 447

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

poj2566Bound Found(前缀和+尺取法)

http://poj.org/problem?id=2566 开始看到这道题时不会做,看了题解才会的,由于原序列散乱,不知道怎么加才能最大,而尺取法要在序列有序才能进行,所以可以用前缀和来使序列单调。定义pair&lt;ilong,long&gt; ss前面记录千缀合,后面记录编号,然后根据千缀合进行大小排序,sort默认按ss.first从大到小排序的,所以有了单调性 所以,ss[j].fi...

Endeavor_G的博客 399

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

POJ-2566-Bound Found(尺取法 好题!!!)

题目 Sample Input 5 1 -10 -5 0 5 10 3 10 2 -9 8 -7 6 -5 4 -3 2 -1 0 5 11 15 2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 15 100 0 0 Sample Output 5 4 4 5 2 8 9 1 1 15 1 15 15 1 15 题意:给你一个序列长度n。再给一个q次询...

qq_42576687的博客 420

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

poj 2566 Bound Found (尺取法)

Poj2566  题目链接:http://poj.org/problem?id=2566

乐观之奋斗者 752

POJ_2566_Bound_Found_(尺取法+前缀和)

描述 http://poj.org/problem?id=2566 给出一个整数序列,并给出非负整数t,求数列中连续区间和的绝对值最接近k的区间左右端点以及这个区间和的绝对值. Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2592 ...

aquz77529的博客 102

尺取法//POJ3061+POJ2566

第一行照例留给本鸽子精咕咕咕。 尺取法: 1.取数组的一段,即先保存数组的一对下标,根据要求左右移动,不停更新数组前后指针,获取区间值,最终得到答案。 2.多用于求给定的一组数据中,满足某个条件的最优连续子序列。 3.尺取法通常需要对数据进行预处理,方便快速判断(多为预处理前缀和。 4.尺取法必须是找到单调性。 例题:1.POJ3061 思路:尺取模板题,就是尺取的思路。...

MoonLight_月亮 260

尺取法 poj 2566

尺取法:顾名思义就是像尺子一样一段一段去取,保存每次的选取区间的左右端点。然后一直推进 解决问题的思路: 先移动右端点 ,右端点推进的时候一般是加 然后推进左端点,左端点一般是减 poj 2566 题意:从数列中找出连续序列,使得和的绝对值与目标数之差最小 思路: 在原来的数列开头添加一个0 每次找到的区间为 [min(i,j)+1,max(i,j)] ...

202

POJ-2566 Bound Found Time(尺取法)

POJ-2566 Bound Found Time(尺取法) Signals of most probably extra-terrestrial origin have been received and digitalized by The Aeronautic and Space Administration (that must be going through a...

碳酸钙的01妖精的博客 222

poj2566 尺取法

这道题不能直接对于数组进行尺取法, 尺取法需要单调性才能使用,所以我们维护前缀和,并且进行排序,就可以得到单调的序列了。 注意初始化的时候,pair(0,0)也要sort,才能使得解是全的。 #include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;algorithm&gt; #include&lt;cmath&gt; #includ...

weixin_44019404的博客 295

POJ 2566 Bound Found(前缀和排序 + 尺取法)

题目链接:http://poj.org/problem?id=2566题意:对一个长度为n的数列,做k次查询,每次查询一个数t,求原数列中的一个子区间[l, r],使得该子区间的和的绝对值最接近t。思路:在原数列开头添加一个0,处理好现数列a[N]的前缀和pre[N]。则原问题转化为在前缀数组中求2个数pre[i],pre[j]的差的绝对值最接近t的。对于每次找到的2个下标分别为i和j的2个数,所对

Where amazing happens 1246

POJ2566-Bound Found (尺取法)

POJ2566-Bound Found     题目大意:给出一段长度为n的数列,数列中的元素有正有负,求一段连续的区间,使得该区间的和的绝对值最接近给定的值     尺取法一般适用于对一段连续的区间的和进行处理的情况,反复推进区间复杂度一般为O(n)     当区间的元素都正整数时,区间和是单调递增的,通过不断向前推进区间的开头s和末尾t来满足题目要求的最优解即为尺取法     另外对...

weixin_30352645的博客 118
上一篇: poj 2674 弹性碰撞
下一篇: poj 2549 双向搜索
HuanTongH
博客等级 码龄12年 7粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值