差分+前缀和+库存量计算
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,int> PII;
int n,m;
ll k;
struct di
{
int l,r;
}op[300011];
ll a[300011];
ll d[300011];
int main(){
cin>>n>>m;
for(int i=0;i<m;i++)
{
cin>>op[i].l>>op[i].r;
d[op[i].l]+=1;
if(op[i].r+1<=n)
d[op[i].r+1]-=1;
}
ll s0=0;
vector<int> s1(n+2,0);
ll s=0;
for(int i=1;i<=n;i++)
{
s+=d[i];
if(s==1)
{
s1[i]=s1[i-1]+1;
}else
if(s==0)
{
s1[i]=s1[i-1];
s0++;
}
else {
s1[i]=s1[i-1];
}
}
for(int i=0;i<m;i++)
{
int g1=s1[op[i].r]-s1[op[i].l-1]; /l<=x<=r的1个数,s0[l-1]为<=l-1
/这些1会变成0,这就是变化的量
ll an=s0+g1;
cout<<an<<endl;
}
return 0;
}