uva 1451 - Average 数形结合

简介:

     数形结合那篇论文的例题,维护一个下凸队列,一开始为了省事,用了栈,但是原理上有问题,因为有可能正好起点为上凸点的情况,WA了好多次……


/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int org[100005],l,r;
struct node
{
    int v,ind;
    node(int a,int b)
    {
        v=a;
        ind=b;
    }
    node(){}
};
node q[100005];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,L;
        scanf("%d%d",&n,&L);
        while(getchar()!='\n');
        int i;
        int now=0;
        int aa=0,ab=0;
        for(i=1;i<=n;i++)
        {
            if(getchar()=='1')now++;
            org[i]=now;
        }
        r=0;
        q[r++]=node(0,-1);
        q[r++]=node(0,0);
        l=1;
        int ta=-1,tb=0;
        for(int k=L;k<=n;k++)
        {
            i=k-L;
            while(l<r-1&&(((org[i]-q[r-2].v)*(i-q[r-1].ind))-(org[i]-q[r-1].v)*(i-q[r-2].ind))>=0)
               r--;
            q[r++]=node(org[i],i);
            while(l<r-1&&(((org[k]-q[l+1].v)*(k-q[l].ind))-(org[k]-q[l].v)*(k-q[l+1].ind))>=0)
               l++;
            if(((org[k]-q[l].v)*tb-ta*(k-q[l].ind))>0||(((org[k]-q[l].v)*tb-ta*(k-q[l].ind))==0&&(k-q[l].ind)<(ab-aa+1)))
            {
                aa=q[l].ind+1;
                ab=k;
                ta=(org[k]-q[l].v);
                tb=(k-q[l].ind);
            }
        }
        printf("%d %d\n",aa,ab);
    }
}


目录
相关文章
|
9月前
|
人工智能 算法 机器人
对话汶生|或许你还没听过具身智能实训,但是已经有人这样做了
在汶生看来,具身智能真正的价值,在于基于现有成熟技术的可靠商业化,在于服务于成熟的市场。汽车产业、手机产业的发展路径已经验证,最终行业的领导者,不是技术领域的创新者,而是产品和商业化领域的创新者。
|
9月前
|
人工智能 新能源 调度
中国信通院栗蔚:云计算与AI加速融合,如何开启智算时代新纪元?
中国信通院栗蔚:云计算与AI加速融合,如何开启智算时代新纪元?
249 17
|
9月前
|
人工智能 运维 自然语言处理
《探寻开源AI项目的资金密码:可持续运营之路》
在人工智能浪潮中,开源项目汇聚全球智慧,推动AI创新。然而,资金困境限制了其发展。企业赞助、社区捐赠、政府资助、付费服务等模式可为开源项目提供稳定资金来源。通过成本控制、合作伙伴关系及品牌建设,开源项目能实现可持续运营,突破发展瓶颈,为AI领域注入源源不断的活力。
189 12
|
C# iOS开发 Java
****Objective-C 中的方法的调用
oc语言中采用特定的语言调用类或者实例(对象)的方法称为发送消息或者方法调用。 oc中方法的调用有两种:  第一种: [类名或对象名 方法名];   [ClassOrInstance method]; [ClassOrInstance method:arg1]; ...
1265 0
|
存储 网络协议 安全
Linux从安装到实战,手把手教学
Linux从安装到实战,手把手教学
358 0
Linux从安装到实战,手把手教学
|
Java 测试技术 数据库连接
别再写 main 方法测试了,太 Low,这才是专业 Java 测试方法。。(下)
别再写 main 方法测试了,太 Low,这才是专业 Java 测试方法。。(下)
228 0
别再写 main 方法测试了,太 Low,这才是专业 Java 测试方法。。(下)
|
供应链
外贸软件公司有哪些?
软件公司在国内目前数量众多,头部厂商有金蝶,用友等,都是从事saas软件开发及服务,主要客户群是b端客户,企业及公司,但是在外贸这个特殊行业中,从事软件开发及服务的外贸软件公司屈指可数,有zoho,孚盟软件等,和通用型软件不同的是外贸软件是专门面向国内出口型企业的一种外贸管理软件
817 0
外贸软件公司有哪些?
|
Linux Unix
sysfs参考代码
#include #include #include static ssize_t sysfs_read(struct kobject *kobj, struct kobj_attribute *attr, char *buf) { return sprintf(buf, "%s\...
1206 0