CDQ分治 - 单点修改区间查询


题目链接


题解:

一共有两维,一维是操作的时间,一维是操作的位置。一开始时间是排好序的,只需要对位置这一维分治统计。

利用前缀和的思想,把答案记为sum[r]-sum[l-1],所以把查询操作拆成两个:r和l-1。


#include
#define ll long long
using namespace std;
const int N=5e6+7;
int n,m,tot,num=0;
struct Node{
    int tp,id;
    ll val;
    bool operator<(const Node a)const{
        if(id==a.id) return tp>1;
    cdq(l,m);cdq(m+1,r);
    int p=l,q=m+1,i=l;
    ll sum=0;
    while(p<=m&&q<=r){
        if(a[p]

 

你可能感兴趣的:(数据结构)