!震惊,一蒟蒻CF1946B最大子段和代码被外星人搞炸,求调
  • 板块灌水区
  • 楼主Zq_water
  • 当前回复10
  • 已保存回复10
  • 发布时间2024/8/3 11:45
  • 上次更新2024/8/3 13:36:57
查看原帖
!震惊,一蒟蒻CF1946B最大子段和代码被外星人搞炸,求调
895435
Zq_water楼主2024/8/3 11:45

rt

#include<bits/stdc++.h>
#define INF 2e18
#define endl '\n'
#define PI acos(-1)
#define pb push_back
#define fi first
#define se second
#define int long long
#define mem(x,v) memset(x,v,sizeof x)
using namespace std;
const int N = 2e5+5;
const int MOD = 1e9+7;

int n,k,a[N];
struct Tree{
	int l,r,sum,lmx,rmx,maxx;
}t[N<<2];

void pushup(int u){
	t[u].sum=(t[u<<1].sum+t[u<<1|1].sum)%MOD;
	t[u].lmx=max(t[u<<1].lmx,t[u<<1].sum+t[u<<1|1].lmx)%MOD;
	t[u].rmx=max(t[u<<1|1].rmx,t[u<<1|1].sum+t[u<<1].rmx)%MOD;
	t[u].maxx=max({t[u<<1].maxx,t[u<<1|1].maxx,t[u<<1].rmx+t[u<<1|1].lmx})%MOD;
}
void build(int u,int l,int r){
	t[u].l=l,t[u].r=r;
	if(l==r){t[u].sum=a[l];t[u].lmx=t[u].rmx=t[u].maxx=a[l];return;}
	int mid=l+r>>1;
	build(u<<1,l,mid),build(u<<1|1,mid+1,r);
	pushup(u);
}
int qpow(int x,int y){
	int ans=1;
	for(int i=1;i<=y;i++)ans=(ans*2)%MOD;
	return ans;
}
signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>a[i],a[i]=a[i]%MOD;
	build(1,1,n);
	cout<<(t[1].sum%MOD+(qpow(2,k)-1+MOD)%MOD*t[1].maxx%MOD)%MOD;
	return 0;
}
2024/8/3 11:45
加载中...