优美的线段树

#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<cmath>
#define MAXN 500000+10
#define ll long long
#define pii pair<int,int>
#define mp make_pair
using namespace std;
int a[MAXN];
int n,m;
struct Node{
int pre_dat;
ll pre_sum;
int suf_dat;
ll suf_sum;
pii dat;
ll sum;
ll d;
Node(int p1=,ll p2=,int p3=,ll p4=,pii p5=mp(,),ll p6=,ll p7=){
pre_dat=p1,pre_sum=p2,suf_dat=p3,suf_sum=p4,dat=p5,sum=p6,d=p7;
}
}data[MAXN<<];
Node Merge(Node t1,Node t2){
if(t1.dat==mp(,))return t2;
if(t2.dat==mp(,))return t1;
Node ret;
ret.d=t1.d+t2.d;
ret.pre_dat=t1.pre_dat,ret.pre_sum=t1.pre_sum;
if(ret.pre_sum<t1.d+t2.pre_sum){
ret.pre_dat=t2.pre_dat,ret.pre_sum=t1.d+t2.pre_sum;
}
ret.suf_dat=t2.suf_dat,ret.suf_sum=t2.suf_sum;
if(ret.suf_sum<=t2.d+t1.suf_sum){
ret.suf_dat=t1.suf_dat,ret.suf_sum=t2.d+t1.suf_sum;
}
ret.dat=t1.dat,ret.sum=t1.sum;
if(ret.sum<t2.sum){
ret.dat=t2.dat,ret.sum=t2.sum;
}
if(ret.sum<(t1.suf_sum+t2.pre_sum)||ret.sum==(t1.suf_sum+t2.pre_sum)&&ret.dat>mp(t1.suf_dat,t2.pre_dat)){
ret.dat=mp(t1.suf_dat,t2.pre_dat),
ret.sum=(t1.suf_sum+t2.pre_sum);
}
return ret;
}
void build(int k,int L,int R){
if(L+==R){
data[k].pre_dat=data[k].suf_dat=L;
data[k].dat=mp(L,L);
data[k].d=data[k].pre_sum=data[k].suf_sum=data[k].sum=a[L];
return;
}
build(k<<,L,(L+R)>>);
build(k<<|,(L+R)>>,R);
data[k]=Merge(data[k<<],data[k<<|]);
}
Node query(int a,int b,int k,int L,int R){
if(b<=L||R<=a){
return Node(,,,,mp(,),,);
}
else if(a<=L&&R<=b){
return data[k];
}
else{
int mid=((L+R)>>);
Node lc=query(a,b,k<<,L,mid);
Node rc=query(a,b,k<<|,mid,R);
return Merge(lc,rc);
}
}
void solve(){
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
}
build(,,n+);
while(m--){
int x,y;
scanf("%d%d",&x,&y);
Node ans=query(x,y+,,,n+);
printf("%d %d\n",ans.dat.first,ans.dat.second);
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
int T=;
while(~scanf("%d%d",&n,&m)){
printf("Case %d:\n",++T);
solve();
}
return ;
}

最新文章

  1. 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档
  2. Js零散知识点笔记
  3. IIS7配置PHP图解(转)
  4. postgresql命令行
  5. Using User-Named Triggers in Oracle Forms
  6. Java高效读取大文件
  7. SQL server 时间日期函数、类型转换
  8. Visual Studio 2012的新技术特性
  9. hdu2571命
  10. iOS开发 GET、POST请求方法:NSURLSession篇
  11. 为什么使用 Containjs 模块化管理工具效率高?
  12. Play学习 - 体验网页模板
  13. javaScript 设计模式系列之二:适配器模式
  14. 把织梦安装到子目录,不读取CSS 没有样式?
  15. teachable-machine:探索机器学习如何工作,浏览器中实时浏览
  16. Dynamics 365-关于Solution的那些事(二)
  17. KMP替代算法——字符串Hash
  18. Keil中 Program Size: Code RO-data RW-data ZI-data
  19. centos7 rocketmq 4.2.0
  20. Egret IDE中搜索,过滤文件,只搜索.ts

热门文章

  1. Alpha冲刺No.4
  2. 团队开发---”我爱淘“校园二手书店 NABC分析
  3. 201621123068 Week03-面向对象入门
  4. 关于安装win7系统时出现0x0000007b电脑蓝屏代码的问题
  5. JAVA_SE基础——9.基本数据类型间的转换
  6. WIN7 局域网共享打印机每次电脑重启后必须登录密码重新连接问题修复
  7. 阿里云API网关(11)API的三种安全认证方式
  8. 分享:纯 css 瀑布流 和 js 瀑布流
  9. FPGA与MATLAB数据交互高效率验证算法——仿真阶段
  10. Java线程池是如何诞生的?