R.I.P. 55分(难的点都过了,简单的点坠机)
查看原帖
R.I.P. 55分(难的点都过了,简单的点坠机)
681809
BMWIsland楼主2024/5/30 23:46
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define ls (id*2)
#define rs (id*2+1)
#define mid ((l+r)/2)
#define mid2 ((cl+cr)/2)
const int N=114514*2;
inline int read(){
   int f=1,c=0;char ch=getchar();
   while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
   while(ch>='0'&&ch<='9'){c=10*c+ch-'0';ch=getchar();}
   return f*c;
}
inline void write(int z){
	if(z<0)putchar('-'),z=-z;
	if(z>9)write(z/10);
	putchar(z%10+'0');
	return;
}
int n=read(),m=read();
struct node{
	int l,p;
}t[N*4];
void merge(int id){
    t[id].p=t[ls].p+t[rs].p,t[id].l=t[ls].l+t[rs].l;
}
void updata(int id,int p,int k,int l,int r){
    if(l==r){t[id].l+=k,t[id].p=l*t[id].l;return;}
    if(p<=mid)updata(ls,p,k,l,mid);
    else updata(rs,p,k,mid+1,r);
    merge(id);
  }
int ask(int id,int k,int l,int r){
    if(!k)return 0;
    if(l==r)return l*k;
    if(t[ls].l>=k)return ask(ls,k,l,mid);
    return t[ls].p+ask(rs,k-t[ls].l,mid+1,r);
}  
struct j{int d,p,l;}a[N];
struct child{int m,l,id;}q[N];
int cnt;
void init(){
	for(int i=1;i<=n;i++)a[i]={read(),read(),read()};
	a[++n]={-1,0,0};
	sort(a+1,a+n+1,[&](j a,j b)->bool{return a.d>b.d;});
	for(int i=1;i<=m;i++)q[i]={read(),read(),i};
}
int ans[N];
void doit(int l,int r,int cl,int cr){
	if(l>r)return;
	if(cl==cr){
		for(int i=l;i<=r;i++)ans[q[i].id]=a[cl].d;
		return;
	}
	vector<child>L;
	vector<child>R;
	L.emplace_back(0,0,0);
	R.emplace_back(0,0,0);
	while(cnt<mid2) ++cnt,updata(1,a[cnt].p,a[cnt].l,1,n);
  	while(cnt>mid2) updata(1,a[cnt].p,-a[cnt].l,1,n),--cnt;
  	for(int i=l;i<=r;i++){
    	(t[1].l>=q[i].l&&ask(1,q[i].l,1,n)<=q[i].m)?
    	(L.emplace_back(q[i])):
    	(R.emplace_back(q[i]));
  	}
  	for(int i=1;i<L.size();i++)q[l+i-1]=L[i];
  	for(int i=1;i<R.size();i++)q[l+L.size()+i-2]=R[i];
  	doit(l,l+L.size()-2,cl,mid2);
  	doit(l+L.size()-1,r,mid2+1,cr); 
}

signed main(){
	init();
	doit(1,m,1,n);
	for(int i=1;i<=m;i++)write(ans[i]),putchar('\n');
}

坠机地址

难道牛逼到我的线段树只支持n=100000吧

2024/5/30 23:46
加载中...