[QOJ8672][PKUSC2024] 排队

函数复合,直接转化为离线问题,那我们就需要完成对满足条件的量的区间加操作。

显然 \(ans_{[l,r]}\ge ans_{(l,r]}\),所以可以线段树二分。

时间复杂度 \(O(q\log n)\)

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
struct que{int l,r,id;}qu[N];
int n,lc[N],rc[N],as[N];
int q,mn[N*4],ad[N*4];
inline int cmp(que x,que y){
	return x.r<y.r;
}inline void down(int x,int v){
	mn[x]+=v,ad[x]+=v;
}inline void push_down(int x){
	if(!ad[x]) return;
	down(x*2+1,ad[x]);
	down(x*2,ad[x]),ad[x]=0;
}inline void chg(int x,int l,int r,int L,int R){
	if(L>R) return;
	if(L<=l&&r<=R) return down(x,1);
	int mid=(l+r)/2;push_down(x);
	if(L<=mid) chg(x*2,l,mid,L,R);
	if(R>mid) chg(x*2+1,mid+1,r,L,R);
	mn[x]=mn[x*2+1]; 
}inline int find1(int x,int l,int r,int v){
	if(mn[x]>v) return n+1;
	if(l==r) return l;
	int mid=(l+r)/2;push_down(x);
	int re=find1(x*2,l,mid,v);
	if(re<=n) return re;
	return find1(x*2+1,mid+1,r,v);
}inline int find2(int x,int l,int r,int v){
	if(mn[x]>=v) return n+1;
	if(l==r) return l;
	int mid=(l+r)/2;push_down(x);
	int re=find2(x*2,l,mid,v);
	if(re<=n) return re;
	return find2(x*2+1,mid+1,r,v);
}inline int ans(int x,int l,int r,int k){
	if(l==r) return mn[x];
	int mid=(l+r)/2;push_down(x);
	if(k<=mid) return ans(x*2,l,mid,k);
	return ans(x*2+1,mid+1,r,k); 
}int main(){
	ios::sync_with_stdio(0);
	cin.tie(0),cout.tie(0);
	cin>>n>>q;
	for(int i=1;i<=n;i++)
		cin>>lc[i]>>rc[i];
	for(int i=1;i<=q;i++)
		cin>>qu[i].l>>qu[i].r,qu[i].id=i;
	sort(qu+1,qu+q+1,cmp);
	for(int i=1,j=0;i<=q;i++){
		while(j<qu[i].r){
			int l=find1(1,1,n,rc[++j]);
			int r=find2(1,1,n,lc[j])-1;
			chg(1,1,n,l,min(r,j));
		}as[qu[i].id]=ans(1,1,n,qu[i].l);
	}for(int i=1;i<=q;i++)
		cout<<as[i]<<"\n";
	return 0;
}
posted @   长安一片月_22  阅读(20)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
点击右上角即可分享
微信分享提示