RT,差分好题被硬生生地用分块。
结果……Wrong Answer
但萌新不知道为什么啊……
#include <cstdio>
#include <cassert>
#define fo(i_,j_,k_) for(int i_=j_;i_<=k_;++i_)
#define rtn return
const int kMaxn = 200005;
int id[kMaxn],a[kMaxn],b[kMaxn],len,n;
void Init_block(void)
{
len = 500;
fo(i,1,::n)
{
id[i] = (i-1) / len + 1;
}
}
void Add(int l,int r)
{
int sid = id[l],eid = id[r];
if(sid == eid)
{
fo(i,l,r)++a[i];
rtn;
}
for(int i = l;id[i] == sid; ++i)++a[i];
for(int i = sid + 1;i < eid;++i)++b[i];
for(int i = r;id[i] == eid; --i)++a[i];
}
int main()
{
int k,q;
scanf("%d%d%d",&::n,&k,&q);
Init_block();
fo(i,1,n)
{
int l,r;
scanf("%d%d",&l,&r);
Add(l,r);
}
fo(i,1,200000)
a[i] = ((a[i] + b[id[i]]) >= k)?1:0;
fo(i,1,200000)
b[i] = b[i-1] + a[i];
fo(i,1,1)
{
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",b[r] - b[l-1]);
}
rtn 0;
}
甚至连错误数据都拿到了……