提交时间:2023-08-16 16:57:42
运行 ID: 98833
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 2e5+7; int t,cnt[N],ans[N]; struct sth { int l,r,id; const bool operator < (const sth &a) const { return l < a.l; } }q[N]; struct tree { int t[N]; int lowbit(int x) { return x&(-x); } void add(int x,int v) { for(int i = x;i < N;i += lowbit(i)) t[i] += v; return; } int ask(int x) { int ans = 0; for(int i = x;i;i -= lowbit(i)) ans += t[i]; return ans; } }T; int getlen(int l,int r) { return (r-l+1)*(r-l+1 >= 0); } signed main() { scanf("%lld",&t); for(int i = 1;i <= t;i++) { int l,r; scanf("%lld%lld",&q[i].l,&q[i].r); q[i].id = i; l = q[i].l; r = q[i].r; ans[i] = (r-l+1)*(r-l)*(r-l-1)/6-getlen((l+2)/3,r/6)-getlen((l+5)/6,r/15); } sort(q+1,q+t+1); for(int i = N-1,p = t;i >= 1;i--) { for(int j = i+i;j < N;j += i) T.add(j,cnt[j]++); while(p >= 1 && q[p].l == i) { ans[q[p].id] -= T.ask(q[p].r); p--; } } for(int i = 1;i <= t;i++) printf("%lld\n",ans[i]); return 0; }