关于刚才CF的E
  • 板块学术版
  • 楼主Miraik
  • 当前回复8
  • 已保存回复8
  • 发布时间2021/7/31 00:37
  • 上次更新2023/11/4 12:36:47
查看原帖
关于刚才CF的E
236862
Miraik楼主2021/7/31 00:37

rt,一直 Wrong asnwer on Test 9

思路是先排序,线段树维护区间和,区间查询最小值

菜鸡调不出来求查错/kk

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=100005;
inline int read(){
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return x*f;
}
struct FyxTree{
	int l,r,sum,lazy;
}a[(N*10)<<3];
int ls(int x){return x<<1;} int rs(int x){return x<<1|1;}
void update(int k){a[k].sum=min(a[ls(k)].sum,a[rs(k)].sum);}
void pushdown(int k){
	if(a[k].l!=a[k].r){
		a[ls(k)].sum+=(a[ls(k)].r-a[ls(k)].l+1)*a[k].lazy;
		a[rs(k)].sum+=(a[rs(k)].r-a[rs(k)].l+1)*a[k].lazy;
		a[ls(k)].lazy+=a[k].lazy;a[rs(k)].lazy+=a[k].lazy; 
	}
	a[k].lazy=0;
}
void build(int k,int l,int r){
	a[k].l=l,a[k].r=r,a[k].lazy=0;
	if(l==r)a[k].sum=0;
	else{
		int mid=l+r>>1;
		build(ls(k),l,mid);
		build(rs(k),mid+1,r);
		update(k);
	}
}
void change(int k,int l,int r,int x){
	pushdown(k);
	if(a[k].l==l&&a[k].r==r){
		a[k].sum+=(r-l+1)*x;
		a[k].lazy+=x;
	}
	else{
		int mid=a[k].l+a[k].r>>1;
		if(r<=mid)change(ls(k),l,r,x);
		else if(l>mid)change(rs(k),l,r,x);
		else change(ls(k),l,mid,x),change(rs(k),mid+1,r,x);
		update(k);
	}
}
int query(int k,int l,int r){
	if(a[k].lazy)pushdown(k);
	if(a[k].l==l&&a[k].r==r)return a[k].sum;
	int mid=(a[k].l+a[k].r)/2;
	if(r<=mid)return query(ls(k),l,r);
	else if(l>mid)return query(rs(k),l,r);
	else return min(query(ls(k),l,mid),query(rs(k),mid+1,r));
}
struct Seg{
	int l,r,w;
}A[N*3];
bool cmp(Seg a,Seg b){return (a.w!=b.w)?(a.w<b.w):(a.r<b.r);}
int n,m,ans;
int main(){
	n=read(),m=read();
	if(n==1){
		puts("0");return 0;
	}
	for(int i=1;i<=n;i++)A[i].l=read(),A[i].r=read(),A[i].w=read();
	sort(A+1,A+n+1,cmp);
	build(1,1,m);
	change(1,A[1].l,A[1].r,1);
	ans=1<<30;
	for(int i=1,j=2;i<=n;i++){
		while(j<=n&&query(1,1,m)==0)change(1,A[j].l,A[j].r,1),j++;
		if(query(1,1,m)>0)ans=min(ans,A[j-1].w-A[i].w);
		change(1,A[i].l,A[i].r,-1);
	}
	printf("%d\n",ans);
	return 0;
}

2021/7/31 00:37
加载中...