#include #include #include #include using namespace std; typedef long long LL; const int maxn=3e5+5; struct MODI { int id,L,R,A; } modi[maxn*2],tl[maxn*2],tr[maxn*2]; int N,M,K,P[maxn],res[maxn],q[maxn]; vector bl[maxn],ql,qr; LL c[maxn]; void add(int p,LL v) { for(;p<=M;p+=(p&-p)) c[p]+=v; } LL sum(int p) { LL s=0; for(;p;p-=(p&-p)) s+=c[p]; return s; } inline void opt(const MODI &md,int flg) { if(md.L<=md.R) { add(md.L,flg*md.A); add(md.R+1,-flg*md.A); } else { add(md.L,flg*md.A); add(M+1,-flg*md.A); add(1,flg*md.A); add(md.R+1,-flg*md.A); } } void solve(int ML,int MR,int QL,int QR)//ML,QL:id,country { if(QL>QR) return;//no need to do any more if(ML==MR) { for(int i=QL;i<=QR;i++) res[q[i]]=modi[ML].id; return; } int MM=(ML+MR)>>1; for(int i=ML;i<=MM;i++) opt(modi[i],1); ql.clear(); qr.clear(); for(int i=QL;i<=QR;i++) { long double tot=0; for(int j=0;j=P[q[i]]) ql.push_back(q[i]); else qr.push_back(q[i]); } for(int i=0;i