上帝造题的七分钟(ybtoj-树状数组)
文章目录
- 题目描述
- 解析
- 代码
- 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-树状数组)相关推荐
- BZOJ 3038: 上帝造题的七分钟2【线段树区间开方问题】
3038: 上帝造题的七分钟2 Time Limit: 3 Sec Memory Limit: 128 MB Submit: 1469 Solved: 631 [Submit][Status][D ...
- 【luogu4145】 上帝造题的七分钟2 / 花神游历各国 [线段树]
P4145 上帝造题的七分钟2 / 花神游历各国 把一段区间里的每个数都开方 求区间和 可以发现最多开方开6次就能都变为1 所以可以hei暴力地一个点一个点地改 具体操作我用的和buildtree差不 ...
- 【暑假训练 7.10】 codevs 2492 上帝造题的七分钟2
Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...
- BZOJ3038 上帝造题的七分钟
Time Limit: 3 Sec Memory Limit: 128 MB Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说, ...
- BZOJ 3038 上帝造题的七分钟2
Description XLk觉得<上帝造题的七分钟>不太过瘾,于是有了第二部. "第一分钟,X说,要有数列,于是便给定了一个正整数数列. 第二分钟,L说,要能修改,于是便有了对 ...
- 【BZOJ3132】【TYVJ1716】上帝造题的七分钟 二维树状数组
题目大意 维护一个\(n\times m\)的矩阵,有两种操作: \(1~x_1~y_1~x_2~y_2~v\):把\((a,b),(c,d)\)为顶点的矩形区域内的所有数字加上\(v\). \(2~ ...
- bzoj 3211: 花神游历各国 bzoj 3038: 上帝造题的七分钟2
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 3438 Solved: 1277 [Submit][Status][Dis ...
- 洛谷4145上帝造题的七分钟2
题目:https://www.luogu.org/problemnew/show/P4145 题解:发现1e12开方6次就变成1了.1不管开方多少次还是1. 所以并查集记录nxt表示下一个可操作者在哪 ...
- Luogu 4514 上帝造题的七分钟
二维差分+树状数组. 定义差分数组$d_{i, j} = a_{i, j} + a_{i - 1, j - 1} - a_{i, j - 1} - a_{i - 1, j}$,有$a_{i, j} = ...
最新文章
- [云炬创业基础笔记]做好市场调研
- 使用Spring Integration进行消息处理
- C#调用WebKit内核
- Pyalgotrade量化交易回测框架
- Airflow 中文文档:调度和触发器
- 81-spark异常总结1
- 要成为linux网站运维工程师必须要掌握的技能
- WinForm自适应的相关代码
- 3.实现蛇和基本游戏界面
- BGP 路由聚合实验
- Moto me525+ 刷机
- 学习笔记 第八周 第二篇(修改版)
- sql命令手册(转载)http://www.fanqiang.com
- 中邮网院/邮e联下载
- 高中英语试验修订本(第一册)上(人教版)
- 2022-2028年中国塑封机行业市场需求分析及投资前景展望报告
- Python--------随机生成四位数字与大写英文字母组合的验证码(简单版)
- 【JAVA学习】java中怎么遍历HashMap(Iterator迭代器遍历)
- Eaglestream平台下 取消BMC ACPI引发的host 无法power on 问题
- cimcoeditv5怎样模拟刀路_cimco edit v5怎么不显示刀具运动轨迹
热门文章
- 重磅大礼!100本《机器学习》by周志华,免费送!
- 计算机老师开场白试讲视频,教师招考试讲模版之开场白
- 打开本地文件_可以跨软件搜索文件?结构式检索你一定要学会!
- 6计算机系统的组成是,计算机系统的组成(范文)(6页)-原创力文档
- python姓名输出语句_Python最基本的输入输出详解
- 初级Java开发面试必问项!!! 标识符、字面值、变量、数据类型,该学学了!
- lmbs PHP,PHP 清空 MySql 指定数据表中的所有数据
- 软件层面可以做到重启本地串口吗_手机关机还是重启好?get这几招,手机更流畅...
- windows server 启用 vss_windows服务器常用的安全加固方法
- 算法设计与分析——动态规划——石子合并问题