[COGS755]山海经
很远古的一道题,当时打的跟(*机房和谐*)一样,后来用$ O(q*n) $的算法卡到了T75
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cmath> 5 #include<cstring> 6 #define ll long long 7 #define m(a) memset(a,0,sizeof(a)) 8 using namespace std; 9 const int maxn=1e5+100; 10 int ans,x,y,w,n,m,a[maxn],l,r,z; 11 int main() 12 { 13 scanf("%d%d",&n,&m); 14 for(register int i=1;i<=n;i++) scanf("%d",&a[i]); 15 for(register int i=1;i<=m;++i) 16 { 17 scanf("%d%d",&x,&y); 18 l=r=w=0; 19 ans=-1e5; 20 z=x; 21 for(register int j=x;j<=y;++j) 22 { 23 w+=a[j]; 24 if(w>ans) 25 { 26 ans=w; 27 l=z; 28 r=j; 29 } 30 if(w<0) 31 { 32 z=j+1; 33 w=0; 34 } 35 } 36 printf("%d %d %d\n",l,r,ans); 37 } 38 return 0; 39 }
TLE75
现在打起来这个题是真的简单(虽然我早在4月份已经颓了题解)
首先维护4个w,3个x,3个y,分别代表:
(尖括号代表从哪里转移过来)
(0):左段最大值以及其左右端点
1>w[ls][0]
2>w[ls][3]+w[rs][0]
(1):中间最大值以及其左右端点
1>w[ls][1]
2>w[rs][1]
3>w[ls][2]+w[rs][0]
(2):右段最大值以及其左右端点
1>w[rs][2]
2>w[rs][3]+w[ls][2]
(3):整段的最大值。
1>w[ls][3]+w[rs][3]
因为要输出最小字典序,所以某些最大值相等的情况要考虑字典序的问题
否则会WA88(可能WA0?)
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e5+10; 4 int n,m,f[N]; 5 struct Tree{int l,r,x[3],y[3],w[4];}a[N*4]; 6 int read() 7 { 8 int sum,k=1;char s; 9 while(s=getchar(),s<'0'||s>'9')if(s=='-')k=-1;sum=s-'0'; 10 while(s=getchar(),s>='0'&&s<='9') sum=sum*10+s-'0'; 11 return k*sum; 12 } 13 void merge(int k,Tree ls,Tree rs) 14 { 15 if(ls.w[0]>=ls.w[3]+rs.w[0]) 16 { 17 a[k].w[0]=ls.w[0]; 18 a[k].x[0]=ls.x[0]; 19 a[k].y[0]=ls.y[0]; 20 } 21 else 22 { 23 a[k].w[0]=ls.w[3]+rs.w[0]; 24 a[k].x[0]=ls.x[0]; 25 a[k].y[0]=rs.y[0]; 26 } 27 if(ls.w[2]+rs.w[0]>ls.w[1]||(ls.w[2]+rs.w[0]==ls.w[1]&&ls.x[2]<ls.x[1])) 28 { 29 if(ls.w[2]+rs.w[0]>=rs.w[1]) 30 { 31 a[k].w[1]=ls.w[2]+rs.w[0]; 32 a[k].x[1]=ls.x[2]; 33 a[k].y[1]=rs.y[0]; 34 } 35 else 36 { 37 a[k].w[1]=rs.w[1]; 38 a[k].x[1]=rs.x[1]; 39 a[k].y[1]=rs.y[1]; 40 } 41 } 42 else 43 { 44 if(ls.w[1]>=rs.w[1]) 45 { 46 a[k].w[1]=ls.w[1]; 47 a[k].x[1]=ls.x[1]; 48 a[k].y[1]=ls.y[1]; 49 } 50 else 51 { 52 a[k].w[1]=rs.w[1]; 53 a[k].x[1]=rs.x[1]; 54 a[k].y[1]=rs.y[1]; 55 } 56 } 57 if(ls.w[2]+rs.w[3]>=rs.w[2]) 58 { 59 a[k].w[2]=ls.w[2]+rs.w[3]; 60 a[k].x[2]=ls.x[2]; 61 a[k].y[2]=rs.y[3]; 62 } 63 else 64 { 65 a[k].w[2]=rs.w[2]; 66 a[k].x[2]=rs.x[2]; 67 a[k].y[2]=rs.y[2]; 68 } 69 a[k].w[3]=ls.w[3]+rs.w[3]; 70 } 71 void build(int k,int l,int r) 72 { 73 a[k].l=l;a[k].r=r; 74 if(l==r) 75 { 76 a[k].x[0]=a[k].x[1]=a[k].x[2]=l; 77 a[k].y[0]=a[k].y[1]=a[k].y[2]=l; 78 a[k].w[0]=a[k].w[1]=a[k].w[2]=a[k].w[3]=f[l]; 79 return; 80 } 81 int mid=(l+r)>>1; 82 build(k<<1,l,mid); 83 build(k<<1|1,mid+1,r); 84 merge(k,a[k<<1],a[k<<1|1]); 85 } 86 Tree query(int k,int l,int r) 87 { 88 if(a[k].l>=l&&a[k].r<=r) return a[k]; 89 int mid=(a[k].l+a[k].r)>>1; 90 Tree X,Y; 91 if(l<=mid) X=query(k<<1,l,r); 92 if(r>mid) Y=query(k<<1|1,l,r); 93 if(l<=mid&&r>mid) 94 { 95 merge(0,X,Y); 96 return a[0]; 97 } 98 else if(l<=mid) return X; 99 else return Y; 100 } 101 signed main() 102 { 103 //freopen("1.in","r",stdin); 104 //freopen("1.out","w",stdout); 105 n=read();m=read(); 106 for(int i=1;i<=n;i++) f[i]=read(); 107 build(1,1,n); 108 for(int i=1,x,y,ans,l,r;i<=m;i++) 109 { 110 x=read();y=read(); 111 Tree S=query(1,x,y); 112 ans=max(S.w[0],max(S.w[1],S.w[2])); 113 if(S.w[0]>=S.w[1]) 114 { 115 if(S.w[0]>=S.w[2]) l=S.x[0],r=S.y[0]; 116 else l=S.x[2],r=S.y[2]; 117 } 118 else 119 { 120 if(S.w[1]>=S.w[2]) l=S.x[1],r=S.y[1]; 121 else l=S.x[2],r=S.y[2]; 122 } 123 printf("%d %d %d\n",l,r,ans); 124 } 125 return 0; 126 }
AC
转载于:https://www.cnblogs.com/AthosD/articles/11396561.html
[COGS755]山海经相关推荐
- 微信小程序打开红包的css_山海经攻略(微信小程序现金红包提现游戏)
扫码进入小程序按照系统提示操作就可以获得0.3元红包,可以直接提现到微信账户. 一.山海经异变收入来源有三种 1.每升一级大概有一元的红包,满50元提现 2.获得分红神兽,分红神兽有四种,分别是神兽鸿 ...
- 山海经鸿蒙手游iOS 版本,山海经鸿蒙异兽iOS版
山海经鸿蒙异兽iOS版是一款非常好玩的玄幻武侠游戏,游戏里加入了更多的远古巨兽,玩家们可以驯服来做自己的神宠,游戏的战斗场面非常的热血刺激,远古巨兽之争,到底谁是最后的王者?山海经鸿蒙异兽最新版给你一 ...
- 超神线段树 山海经
问题 K: 山海经 时间限制: 1 Sec 内存限制: 128 MB 题目描述 "南山之首日鹊山.其首日招摇之山,临于西海之上,多桂,多金玉.有草焉,其状如韭而青华,其名日祝余,食之不饥- ...
- 除了鸿蒙还注册,除了“华为鸿蒙”,你不知道的是,整本山海经都被华为注册了...
除了"华为鸿蒙",你不知道的是,整本山海经都被华为注册了 2019-05-25 19:06:37 在被列入"实体名单"后,华为面临很多协作商中止事务来往.中止供 ...
- 华为真的注册鸿蒙,“鸿蒙”真的来了!华为注册了整本山海经?
5月24日消息,国家知识产权局商标局网站显示,华为已经申请注册"华为鸿蒙"商标,并标注该商品可用于操作系统程序. 图自国家知识产权局商标局网站 这条新闻一出,国内许多网友都是兴奋又 ...
- 还原《山海经》中的东方奇幻世界,这款手游是怎么做到的?
筹备超3年.预约量破300万的回合制RPG手游<山海镜花>开启全平台公测,上线前10天,该游戏始终位于App Store免费榜榜首,总下载量超过500万次. <山海镜花>取得如 ...
- 有生之年必看!千古第一奇书《山海经》到底是怎样的一本书?
▲点击查看 提到<山海经>,大家应该都耳熟能详. 作为一部富有神话色彩的千古奇书,它记载了各种脍炙人口的神话传说,像女娲造人.夸父逐日.羿射九日.精卫填海.大禹治水--都是从这里诞生的. ...
- 华为注册鸿蒙商标与三海经,华为注册了一本《山海经》?除了鸿蒙商标,还有很多...
原标题:华为注册了一本<山海经>?除了鸿蒙商标,还有很多 5月25日消息 昨天IT之家报道, 国家知识产权商标局网站显示,,适用于第9类别和第42类别.申请日期为2018年8月24日. 此 ...
- 华为鸿蒙山海,华为包圆了整部《山海经》,鸿蒙是何意?还有青龙白虎朱雀玄武?...
华为已经申请注册"华为鸿蒙"商标 并标注该商品可用于操作系统程序 鸿蒙 一个自带书香气的名字 一听就是文化人! 一听就是中华文化传承人! 那么 鸿蒙是啥意思 鸿蒙就是一团气 不是普 ...
- 人工智能 量子力学 时间简史 山海经 三体
12堂给孩子的人工智能原理课,轻松了解自然语言处理和机器视觉 12堂给孩子的人工智能原理课,轻松了解自然语言处理和机器视觉_哔哩哔哩_bilibili 不愧是价值26980的[Python人工智能]全 ...
最新文章
- 五分钟体验分布式调度框架xxl-job
- 提交请求输出XML文件的时候出错.解决方法
- WebDriver介绍
- poj1423---求一个大数的位数方法,我猜网站上统计输入字符少于多少位的那个算法...
- two pointers(双指针思想)
- windows下生成ssh key详解
- redhat oracle环境变量配置文件,Redhat7.2(7.1)下oracle8.17的安装手册-数据库专栏,ORACLE...
- web前端需要学习什么?
- Redis(服务端/客户端)的启动、关闭、查看状态
- 3. 剪辑入门--电影混剪 (1)
- 动手学Android之六——布局初步(三)
- 向量叉乘求三维空间中两直线(或线段)的交点
- 报班太贵,刷题太累?讯飞智能学习机提出A.I.新“疗法”
- R语言使用quantmod包的getSymbols函数从指定金融数据源获取指定时间段的股票数据、美股不使用后缀、其它股票需要使用后缀:大陆沪市使用:“.SS“,深市使用:“.SZ“,香港使用:“.HK
- win7快捷键Ctrl+Alt+↑或者↓ 屏幕倒过来了
- 腾讯AI Lab赠票 | 相约腾讯全球合作伙伴大会,南京见!
- 有关兰州IOC项目 对接华为北向IOT-消息订阅模块的Demo编写以及验证梳理(陈晓阳)
- 曲线绕y轴旋转一周所得旋转体体积_由曲线y=x,x=1,x=2,x轴围成的图形绕x轴旋转一周所得旋转体的体积是______.-数学-魔方格...
- 长春五年制大专计算机学校排名,2018中国最好的五年制大专排名 最新排行名单公布...
- 鼻纹识别,让AI寻宠照进现实
热门文章
- 捋一捋这些我记不清的python概念
- org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is jav
- 联想台式电脑修复计算机,处理联想一键恢复电脑系统教程
- IntelliJ IDEA 2019 配置PHP开发环境
- 【Node.js 微信公众号实战】4.Node.js 微信消息管理
- 常用控件的使用有哪些?如何操作控件?
- android sd卡数据恢复软件下载,内存卡数据恢复
- Premiere cs6导出MP4格式视频
- Qt表格分页,跳转,首尾页
- 交叉编译openssl