#include<bits/stdc++.h>
using namespace std;
vector<int>v[200001];
const int sz=2*1e5+7;
typedef long long ll;
const int INF=0x3f3f3f3f;
map<int,int>mp;
int a[sz],b[sz],l[sz],r[sz],vis[sz];
char c[sz];
struct node
{
int maxx,minn,l,r,lazy;
} tree[4*sz];
void build(int id,int l,int r)
{
tree[id].l=l;
tree[id].r=r;
tree[id].lazy=0;
if(l==r)
{
tree[id].maxx=tree[id].minn=a[l];
return ;
}
int mid=(l+r)>>1;
build(id<<1,l,mid);
build(id<<1|1,mid+1,r);
tree[id].maxx=max(tree[id<<1].maxx,tree[id<<1|1].maxx);
tree[id].minn=min(tree[id<<1].minn,tree[id<<1|1].minn);
}
void pushdown(int id)
{
tree[id<<1].maxx+=tree[id].lazy;
tree[id<<1].minn+=tree[id].lazy;
tree[id<<1|1].maxx+=tree[id].lazy;
tree[id<<1|1].minn+=tree[id].lazy;
tree[id<<1].lazy+=tree[id].lazy;
tree[id<<1|1].lazy+=tree[id].lazy;
tree[id].lazy=0;
}
void update(int id,int l,int r,int val)
{
if(tree[id].l>=l&&tree[id].r<=r)
{
tree[id].maxx+=val;
tree[id].minn+=val;
tree[id].lazy+=val;
return ;
}
if(tree[id].lazy!=0)
pushdown(id);
int mid=(tree[id].l+tree[id].r)>>1;
if(r<=mid)
update(id<<1,l,r,val);
else if(l>mid)
update(id<<1|1,l,r,val);
else
{
update(id<<1,l,mid,val);
update(id<<1|1,mid+1,r,val);
}
tree[id].maxx=max(tree[id<<1].maxx,tree[id<<1|1].maxx);
tree[id].minn=min(tree[id<<1].minn,tree[id<<1|1].minn);
}
int main()
{
int n,m,i,j,k,mx,mi;
memset(vis,0,sizeof(vis));
memset(tree,0,sizeof(tree));
scanf("%d %d",&n,&m);
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
for(i=1; i<=m; i++)
scanf("%d %d",&l[i],&r[i]);
if(n==1)
{
printf("0\n0\n");
}
else
{
int ans=0,sum1=0,sum=0,t;
build(1,1,n);
mx=tree[1].maxx;
mi=tree[1].minn;
ans=mx-mi;
for(i=1; i<=n; i++)
{
sum=0;
for(j=1; j<=m; j++)
{
if(i>=l[j]&&i<=r[j])
{
sum++;
if(!vis[j])
{
update(1,l[j],r[j],-1);
vis[j]=1;
}
}
else if(vis[j]==1)
{
update(1,l[j],r[j],1);
vis[j]=0;
}
}
mx=tree[1].maxx;
mi=tree[1].minn;
if(ans<mx-mi)
{
ans=mx-mi;
t=i;
sum1=sum;
}
}
printf("%d\n%d\n",ans,sum1);
if(sum1)
{
for(i=1;i<=m;i++)
{
if(l[i]<=t&&t<=r[i])
printf("%d ",i);
}
}
}
return 0;
}
E2. Array and Segments (Hard version) 线段树
最新推荐文章于 2021-06-21 22:45:45 发布