文章目录

  • 题目描述
  • 解析
  • 代码
  • thanks for reading!

题目描述

解析

差点活活恶心死
搬砖题
(其实细节没有那么多,还是代码能力太差)

利用矩阵的二维差分
加上树状数组搞一搞
就完事了(我实在不想再写了 )

洛谷的双倍经验没有那么好水
MLE!
这题洛谷的空间限制非常苛刻
几乎没有多余的空间

以后要增强对空间复杂度的敏感性

代码

(看我的print就能看出我调了多久)

#include<bits/stdc++.h>
using namespace std;
const int N=2050;
#define ll long long
int d[N][N];
ll id[N][N],jd[N][N],ijd[N][N];
int n,m;void add_d(int x,int y,ll v){//  printf("\nx=%d y=%d v=%lld\n",x,y,v);for(int i=x;i<=n;i+=i&-i){for(int j=y;j<=m;j+=j&-j){d[i][j]+=v;
//          printf("x=%d y=%d\n",i,j);}}
}
ll ask_d(int x,int y){//  printf("\nask:\nx=%d y=%d\n",x,y);ll ans=0;for(int i=x;i;i-=i&-i){for(int j=y;j;j-=j&-j){ans+=d[i][j];} }return ans;
}
void add_id(int x,int y,ll v){v*=x;
//  printf("\nx=%d y=%d v=%lld\n",x,y,v);for(int i=x;i<=n;i+=i&-i){for(int j=y;j<=m;j+=j&-j) id[i][j]+=v;//printf("x=%d y=%d\n",i,j);}
}
ll ask_id(int x,int y){ll ans=0;
//  printf("ask:x=%d y=%d\n------------\n",x,y);for(int i=x;i;i-=i&-i){for(int j=y;j;j-=j&-j){ans+=id[i][j];
//          printf("x=%d y=%d\n",i,j);} }return ans;
}
void add_jd(int x,int y,ll v){v*=y;for(int i=x;i<=n;i+=i&-i){for(int j=y;j<=m;j+=j&-j) jd[i][j]+=v;}
}
ll ask_jd(int x,int y){ll ans=0;for(int i=x;i;i-=i&-i){for(int j=y;j;j-=j&-j){ans+=jd[i][j];} }return ans;
}
void add_ijd(int x,int y,ll v){v*=x*y;for(int i=x;i<=n;i+=i&-i){for(int j=y;j<=m;j+=j&-j) ijd[i][j]+=v;}
}
ll ask_ijd(int x,int y){ll ans=0;for(int i=x;i;i-=i&-i){for(int j=y;j;j-=j&-j){ans+=ijd[i][j];} }return ans;
}void add(int x1,int y1,int x2,int y2,ll v){add_d(x1,y1,v);add_d(x2+1,y2+1,v);add_d(x1,y2+1,-v);add_d(x2+1,y1,-v);add_id(x1,y1,v);add_id(x2+1,y2+1,v);add_id(x1,y2+1,-v);add_id(x2+1,y1,-v);add_jd(x1,y1,v);add_jd(x2+1,y2+1,v);add_jd(x1,y2+1,-v);add_jd(x2+1,y1,-v);add_ijd(x1,y1,v);add_ijd(x2+1,y2+1,v);add_ijd(x1,y2+1,-v);add_ijd(x2+1,y1,-v);
}
ll ask(int x,int y){//  printf("ok%lld\n",d[2][1]);
//  n--;m--;ll res=(x*y+x+y+1)*ask_d(x,y)+ask_ijd(x,y)-(y+1)*ask_id(x,y)-(x+1)*ask_jd(x,y);
//  printf("x=%d y=%d d=%lld id=%lld jd=%lld ijd=%lld ans=%lld\n",x,y,
//  ask_d(x,y),ask_id(x,y),ask_jd(x,y),ask_ijd(x,y),res);
//  cout<<res<<endl;
//  n++;m++;return res;
}
int main(){//  printf("%d",sizeof(d)/1024/1024);char flag;scanf("%c%d%d",&flag,&n,&m);
//  add_id(1,1,2);add_id(2,2,1);
//  printf("%lld\n",ask_id(3,3));int a,b,c,e,w;while(scanf(" %c",&flag)!=EOF){if(flag=='L'){scanf("%d%d%d%d%d",&a,&b,&c,&e,&w);add(a,b,c,e,w);
//          printf("okk:%lld\n",ask_d(1,1));}else{scanf("%d%d%d%d",&a,&b,&c,&e);
//          printf("okk:%lld\n",ask_d(1,1));printf("%lld\n",ask(c,e)+ask(a-1,b-1)-ask(a-1,e)-ask(c,b-1));}
//      printf("------------opp:%lld\n",ask_id(3,3));}    return 0;
}
/**/

thanks for reading!

上帝造题的七分钟(ybtoj-树状数组)相关推荐

  1. BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】

    3038: 上帝造题的七分钟2 Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1469  Solved: 631 [Submit][Status][D ...

  2. 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]

    P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...

  3. 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  4. BZOJ3038 上帝造题的七分钟

    Time Limit: 3 Sec Memory Limit: 128 MB Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说, ...

  5. BZOJ 3038 上帝造题的七分钟2

    Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...

  6. 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组

    题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...

  7. bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2

    3211: 花神游历各国 Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 3438  Solved: 1277 [Submit][Status][Dis ...

  8. 洛谷4145上帝造题的七分钟2

    题目:https://www.luogu.org/problemnew/show/P4145 题解:发现1e12开方6次就变成1了.1不管开方多少次还是1. 所以并查集记录nxt表示下一个可操作者在哪 ...

  9. Luogu 4514 上帝造题的七分钟

    二维差分+树状数组. 定义差分数组$d_{i, j} = a_{i, j} + a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$,有$a_{i, j} = ...

最新文章

  1. [云炬创业基础笔记]做好市场调研
  2. 使用Spring Integration进行消息处理
  3. C#调用WebKit内核
  4. Pyalgotrade量化交易回测框架
  5. Airflow 中文文档:调度和触发器
  6. 81-spark异常总结1
  7. 要成为linux网站运维工程师必须要掌握的技能
  8. WinForm自适应的相关代码
  9. 3.实现蛇和基本游戏界面
  10. BGP 路由聚合实验
  11. Moto me525+ 刷机
  12. 学习笔记 第八周 第二篇(修改版)
  13. sql命令手册(转载)http://www.fanqiang.com
  14. 中邮网院/邮e联下载
  15. 高中英语试验修订本(第一册)上(人教版)
  16. 2022-2028年中国塑封机行业市场需求分析及投资前景展望报告
  17. Python--------随机生成四位数字与大写英文字母组合的验证码(简单版)
  18. 【JAVA学习】java中怎么遍历HashMap(Iterator迭代器遍历)
  19. Eaglestream平台下 取消BMC ACPI引发的host 无法power on 问题
  20. cimcoeditv5怎样模拟刀路_cimco edit v5怎么不显示刀具运动轨迹

热门文章

  1. 重磅大礼!100本《机器学习》by周志华,免费送!
  2. 计算机老师开场白试讲视频,教师招考试讲模版之开场白
  3. 打开本地文件_可以跨软件搜索文件?结构式检索你一定要学会!
  4. 6计算机系统的组成是,计算机系统的组成(范文)(6页)-原创力文档
  5. python姓名输出语句_Python最基本的输入输出详解
  6. 初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!
  7. lmbs PHP,PHP 清空 MySql 指定数据表中的所有数据
  8. 软件层面可以做到重启本地串口吗_手机关机还是重启好?get这几招,手机更流畅...
  9. windows server 启用 vss_windows服务器常用的安全加固方法
  10. 算法设计与分析——动态规划——石子合并问题