比赛 2019.3.13 评测结果 AAAAAAAAAA
题目名称 飘雪圣域 最终得分 100
用户昵称 AloneLight 运行时间 2.085 s
代码语言 C++ 内存使用 28.92 MiB
提交时间 2019-05-07 10:11:00
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,q,fa[200005],l[200005],r[200005],cnt,res[200005],bit[200005];
vector<int>g[200005];
void upd(int x,int v){for(;x<=200000;x+=x&-x)bit[x]+=v;}
int qry(int x){int r=0;for(;x;x-=x&-x)r+=bit[x];return r;}
int sum(int l,int r){return qry(r+1)-qry(l);}
struct qq{int t,k,id;bool operator<(const qq& r)const{return (t!=r.t)?t<r.t:((k!=r.k)?k<r.k:id<r.id);}}a[600005];
void dfs(int x,int p){fa[x]=p;for(int i=0;i<g[x].size();i++)if(g[x][i]!=p)dfs(g[x][i],x);}
int main()
{
	freopen("icekingdom.in","r",stdin);
	freopen("icekingdom.out","w",stdout);
	scanf("%d%d",&n,&q);
	for(int i=1,u,v;i<n;i++){scanf("%d%d",&u,&v);u--;v--;g[u].push_back(v);g[v].push_back(u);}
	dfs(0,-1);
	for(int i=1;i<n;i++)a[cnt++]=(qq){fa[i],0,i};
	for(int i=0;i<q;i++){scanf("%d %d",&l[i],&r[i]);l[i]--,r[i]--;a[cnt++]=(qq){l[i],-1,i};a[cnt++]=(qq){r[i],1,i};}
    sort(a,a+cnt);
    for(int i=0;i<cnt;i++)if(a[i].k==0)upd(a[i].id+1,1);else res[a[i].id]+=a[i].k*sum(l[a[i].id],r[a[i].id]);
	for(int i=0;i<q;i++)printf("%d\n",r[i]-l[i]+1-res[i]);
	return 0;
}