计蒜客The beautiful values of the palace

题目链接、

y轴压缩,维护x的树状数组

矩阵查询变成两个

计蒜客The beautiful values of the palace_第1张图片

 

/*author:revolIA*/
#include
#define HEAP(...) priority_queue<__VA_ARGS__ >
#define heap(...) priority_queue<__VA_ARGS__,vector<__VA_ARGS__ >,greater<__VA_ARGS__ > >
using namespace std;
typedef long long ll;
template  T max(T &a,const T &b){return a>b?a:b;}
template  T min(T &a,const T &b){return a> Add[maxn];
vector Query[maxn];
int main(){
    scanf("%lld",&T);
    while(T--){
        scanf("%lld%lld%lld",&n,&m,&p);
        for(int i=1;i<=n;i++)Add[i].clear(),Query[i].clear();
        for(int i=1,x,y;i<=m;i++){//insert
            scanf("%d%d",&x,&y);
            Add[y].push_back({x,getval(x,y,1LL*n)});
        }
        for(int i=1,x1,y1,x2,y2;i<=p;i++){//ask
            ans[i] = 0;//initial
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            Query[y2].push_back({x1,x2,i,1});
            Query[y1-1].push_back({x1,x2,i,-1});
        }
        for(int i=1;i<=n;i++)Tree[i] = 0;
        for(int i=1;i<=n;i++){
            for(auto j:Add[i])add(j.first,j.second);
            for(auto j:Query[i])ans[j.pos] += j.opt*(query(j.y)-query(j.x-1));
        }
        for(int i=1;i<=p;i++)printf("%lld\n",ans[i]);
    }
    return 0;
}

 

你可能感兴趣的:(模板类(什么,这也是模板),思维(抖啊,抖啊,抖个机灵儿))