KDOI T1 nlogn TLE?
  • 板块学术版
  • 楼主konyakest
  • 当前回复14
  • 已保存回复14
  • 发布时间2022/11/20 13:05
  • 上次更新2023/10/27 02:14:32
查看原帖
KDOI T1 nlogn TLE?
482660
konyakest楼主2022/11/20 13:05
#include <bits/stdc++.h>
using namespace std;
#define F(i,j,k) for (signed i=signed(j);i<=signed(k);i++)
#define endl '\n'
#define int long long
const int maxn=1e5+5;

int t,n,q,a[maxn],b[maxn],cha[maxn],final[maxn],should[maxn];
struct NODE{
	int op,l,r,x;
	void read(){
		cin>>op;
		if(op==1) cin>>l>>r>>x;
		else cin>>l>>r;
	}
	void clear(){
		op=l=r=x=0;
	}
}ask[maxn];


#define ls node*2
#define rs node*2+1
#define mid (l+r)/2
#define pkgl l,mid,ls
#define pkgr mid+1,r,rs

struct Segment{
	int a[maxn],t[maxn*4],tag[maxn*4];
	void updtag(int l,int r,int node,int x){
		tag[node]+=x;
		t[node]+=x;
	}
	void push_down(int l,int r,int node){
		updtag(pkgl,tag[node]);
		updtag(pkgr,tag[node]);
		tag[node]=0;
	}
	void push_up(int node) {t[node]=min(t[ls],t[rs]);}
	void build(int l,int r,int node){
		if(l==r){t[node]=a[l];return;}
		build(pkgl),build(pkgr);
		push_up(node);
	}
	void update(int l,int r,int node,int x,int y,int want){
		if(x<=l&&r<=y) {updtag(l,r,node,want);return;}
		push_down(l,r,node);
		if(mid>=x) update(pkgl,x,y,want);
		if(mid<y) update(pkgr,x,y,want);
		push_up(node);
	}
	int query(int l,int r,int node,int x,int y){
		if(x<=l&&r<=y) return t[node];
		push_down(l,r,node);
		int res=LLONG_MAX;
		if(mid>=x) res=min(res,query(pkgl,x,y));
		if(mid<y) res=min(res,query(pkgr,x,y));
		return  res;
	}
}t1;


signed main() { 
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--){
		cin>>n>>q;
		F(i,1,4*n) t1.t[i]=LLONG_MAX,t1.tag[i]=0;
		F(i,1,n) cin>>a[i],final[i]=a[i];
		F(i,1,q) ask[i].read();
		F(i,1,n) cin>>b[i];
		F(i,1,q) if(ask[i].op==1){
			F(j,ask[i].l,ask[i].r) final[j]+=ask[i].x;
		}
		F(i,1,n) should[i]=a[i]+b[i]-final[i],t1.a[i]=should[i];
		t1.build(1,n,1);
		F(i,1,q) {
			if(ask[i].op==2){
				int mn=t1.query(1,n,1,ask[i].l,ask[i].r);
				// t1.tomax(ask[i].l,ask[i].r,mn);
				cout<<mn<<" ";
			}
			else{
				// t1.add(ask[i].l,ask[i].r,ask[i].x);
				t1.update(1,n,1,ask[i].l,ask[i].r,ask[i].x);
			}
			// F(i,1,n) cerr<<a[i]<<" ";
			// cerr<<endl;
		}
		cout<<endl;
		fill(a+1,a+1+n,0),fill(b+1,b+1+n,0),fill(final+1,final+1+n,0),fill(should+1,should+1+n,0);
		F(i,1,n) ask[i].clear();
		// F(i,1,n) cerr<<cha[i]<<" ";
	}
	return 0; 
}






2022/11/20 13:05
加载中...