比赛 2026.8.26 评测结果 WWATTWAATWWWWWWWWWWW
题目名称 interval 最终得分 15
用户昵称 dream 运行时间 8.630 s
代码语言 C++ 内存使用 7.37 MiB
提交时间 2026-08-26 12:50:49
显示代码纯文本
#include<bits/stdc++.h>
#define ls p*2
#define rs p*2+1
using namespace std;
typedef long long ll;
const int N=250005;
int n,q;
int a[N],b[N];
struct node{
	int l,r;
	int sum,mn,mx,mxc;
}tr[N*4];
void merge(node &p,node x,node y){
	p.sum=x.sum+y.sum;
	p.mn=min(x.mn,y.mn);
	p.mxc=max({x.mxc,y.mxc,abs(b[x.r]-b[y.l])});	
}
void pushup(int p){
	merge(tr[p],tr[ls],tr[rs]);
}
void build(int p,int l,int r){
	tr[p]={l,r,0,0,0,0};
	if(l==r){
		tr[p].mn=tr[p].mx=b[l];
		if(a[l]==b[l]) tr[p].sum=1;
		return;
	}
	int mid=(l+r)/2;
	build(ls,l,mid);
	build(rs,mid+1,r);
	pushup(p);
	
	cout<<"build"<<tr[p].l<<" "<<tr[p].r<<" "<<tr[p].mn<<" "<<tr[p].mxc<<"\n";
}
node query(int p,int l,int r){
	if(l<=tr[p].l&&tr[p].r<=r){
		return tr[p];
	} 
	int mid=(tr[p].l+tr[p].r)/2;
	node lres,rres;
	int l1=0,r1=0;
	if(l<=mid){
		lres=query(ls,l,r);
		l1=1;
	}
	if(r>mid){
		rres=query(rs,l,r);
		r1=1;
	}
	if(!l1) return rres;
	if(!r1) return lres;
	node res;
	merge(res,lres,rres);
	res.l=lres.l,res.r=rres.r;
	cout<<"res"<<res.l<<" "<<res.r<<" "<<res.mn<<" "<<res.mxc<<"\n";
	return res;
}
void solve1(){
	build(1,1,n);
	while(q--){
		int l,r;
		cin>>l>>r;
		l++,r++;
		node res=query(1,l,r);
		if(res.mn>1||res.mxc>1){
			cout<<"0 ";
		}
		else cout<<"1 ";
		
		cout<<"\n\n";
		cout<<res.mn<<" "<<res.mxc<<" "<<res.sum<<"\n";
		cout<<"\n\n";
	}
}
void solve2(){
	build(1,1,n);
	while(q--){
		int l,r;
		cin>>l>>r;
		l++,r++;
		node res=query(1,l,r);
		if(res.sum!=r-l+1){
			cout<<"0 ";
		}
		else cout<<"1 ";
	}	
}
void solve3(){
	while(q--){
		int l,r;
		cin>>l>>r;
		l++,r++;
		vector<int> vec;
		for(int i=l;i<=r;i++){
			vec.push_back(b[i]);
		}
		sort(vec.begin(),vec.end());
		int f=1;
		for(int i=0;i<vec.size()-1;i++){
			if(vec[i+1]-vec[i]>1){
				f=0;
			}
		}
		if((!f)||vec[0]>1){
			cout<<"0 ";
		}
		else{
			cout<<"1 ";
		}
	}
}
int main(){
    freopen("intervallavretni.in","r",stdin);
    freopen("intervallavretni.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    cin>>n>>q;
    int f1=1,f2=1;
    for(int i=1;i<=n;i++){
    	cin>>a[i]>>b[i];
    	if(a[i]!=1) f1=0;
    	if(b[i]>2) f2=0;
	}
	if(f1){
		if(n<=2000&&q<=2000){
			solve3();
		}
		else solve1();
	}
	else if(f2){
		solve2();
	}
    return 0;
} 

/*
1:

7 3
1 3
1 4
1 1
1 2
1 1
1 3
1 3

0 3
0 6
1 3
*/