链的情况 求助
查看原帖
链的情况 求助
448692
__ZXYAKIOI__楼主2022/4/4 21:17
#include <bits/stdc++.h>
#define For(val) for(int i=1;i<=val;++i)
#define DEBUG printf("Passing [%s] in LINE %d.\n", __FUNCTION__, __LINE__)
using namespace std;

const int SIZE = 300000;
int n,m;
struct eDGe{int v,next;}edge[(SIZE << 1) + 9];
int box[SIZE + 9],ecnt;
inline void add_edge(int x,int y) {edge[++ecnt] = (eDGe) {y,box[x]}; box[x] = ecnt;}

int w[SIZE + 9];
int ans[SIZE + 9];

namespace subtask3{
	const int MAX_N = 100000;
	struct peo{
		int s,t;
		bool operator < (const peo &x) const {
			if(s == x.s) return t<x.t;
			return s<x.s;
		}
	}a[MAX_N + 9];
	
	inline void input(){
		int u,v;
		For(n-1) scanf("%d%d",&u,&v);
		For(n) scanf("%d",&w[i]);
		For(m) scanf("%d%d",&a[i].s,&a[i].t);
	}
	
	inline bool cmp(const int &x,const peo &y){
		return y.s>=x;
	}
	
	inline bool cmp_(const int &x,const peo &y){
		return y.t<=x;
	}
	
	inline bool Cmp(const int &x,const peo &y){
		return y.s<x;
	}
	
	inline bool Cmp_(const int &x,const peo &y){
		return y.t>x;
	}
	
	inline void solve(){
		input();
		sort(a+1,a+m+1);
		For(n){
			peo* ed = upper_bound(a+1,a+n+1,i,cmp);
			peo* edd = upper_bound(a+1,ed,i,cmp_);
			ans[i] += ed - (a+1);
			peo* eddd = upper_bound(a+1,a+n+1,i,Cmp);
			peo* edddd = upper_bound(a+1,ed,i,Cmp_);
			ans[i] += edddd - (a+1);
			printf("%d ",ans[i]);
		}
	}
}

int main(){
	scanf("%d%d",&n,&m);
	subtask3::solve();
	return 0;
}
2022/4/4 21:17
加载中...