codeforces 869 E. The Untended Antiquity(树状数组)
题目链接:http://codeforces.com/contest/869/problem/E
题解:这题是挺好想到solution的但是不太好写,由于题目的特殊要求每个矩形不会重贴所以只要这两个点最内抱着他们的是同一个矩形就行了。就是最近抱汉她们的矩形是同一个就行了。有一种方法挺好的主要是数据是大多数随机的,所以可以考虑hash一下rand一下每个点的赋值然后求前缀和相同就是满足条件的,这里可以用一下2维德树状数组做一下。seed尽量大点这样失败的概率也就小点官方题解有详细的概率数据可以参考一下。然后就这样了........
#include <iostream> #include <cstring> #include <cstdio> #include <map> using namespace std; const int M = 2500 + 10; typedef unsigned long long ll; pair<ll , ll> mmp[M][M]; pair<ll , ll> nub[M][M]; void add(int x , int y , pair<int , int> num) {for(int i = x ; i <= 2501 ; i += (i & (-i))) {for(int j = y ; j <= 2501 ; j += (j & (-j))) {nub[i][j].first += num.first;nub[i][j].second += num.second;}} } pair<ll , ll> query(int x , int y) {pair<ll , ll> res;for(int i = x ; i ; i -= (i & (-i))) {for(int j = y ; j ; j -= (j & (-j))) {res.first += nub[i][j].first;res.second += nub[i][j].second;}}return res; } int main() {int n , m , q;int t , r1 , c1 , r2 , c2;scanf("%d%d%d" , &n , &m , &q);srand((1 << 31));pair<ll , ll> ad , rd;while(q--) {scanf("%d%d%d%d%d" , &t , &r1 , &c1 , &r2 , &c2);if(t == 1) {ad.first = mmp[r1][c1].first = rand();ad.second = mmp[r1][c1].second = rand();rd.first = -ad.first;rd.second = -ad.second;add(r1 , c1 , ad);add(r2 + 1 , c1 , rd);add(r1 , c2 + 1 , rd);add(r2 + 1 , c2 + 1 , ad);}if(t == 2) {rd = mmp[r1][c1];ad.first = -rd.first;ad.second = -rd.second;add(r1 , c1 , ad);add(r2 + 1 , c1 , rd);add(r1 , c2 + 1 , rd);add(r2 + 1 , c2 + 1 , ad);mmp[r1][c1] = make_pair(0 , 0);}if(t == 3) {ad = query(r1 , c1);rd = query(r2 , c2);if(ad == rd) printf("Yes\n");else printf("No\n");}}return 0; }
转载于:https://www.cnblogs.com/TnT2333333/p/7647962.html
codeforces 869 E. The Untended Antiquity(树状数组)相关推荐
- Codeforces 216D Spider#39;s Web 树状数组+模拟
题目链接:http://codeforces.com/problemset/problem/216/D 题意: 对于一个梯形区域,假设梯形左边的点数!=梯形右边的点数,那么这个梯形为红色.否则为绿色, ...
- codeforces 261D Maxim and Increasing Subsequence(树状数组优化最长上升子列)
题目链接:http://codeforces.com/problemset/problem/261/D 题意:最长上升子列. 思路:树状数组优化求最长上升子列. #include <iostre ...
- CodeForces - 538F--A Heap of Heaps(树状数组+离线)
题目链接https://codeforces.com/problemset/problem/538/F Time limit 3000 ms Memory limit 524288 kB Andrew ...
- Codeforces Gym 100114 H. Milestones 离线树状数组
H. Milestones Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Descripti ...
- 【CodeForces - 460C】Present(二分+树状数组)
题干: 给定N朵花的原先的高度,从左到右排列,最多浇水m天,每天只能浇一次,每次使得连续的w朵花的高度增长1,问最后最矮的花的高度最高是多少. Examples Input 6 2 3 2 2 2 2 ...
- CodeForces 828E DNA Evolution(树状数组)题解
题意:给你一个串k,进行两个操作: "1 a b":把a位置的字母换成b "2 l r s":求l到r有多少个字母和s匹配,匹配的条件是这样:从l开始无限循环s ...
- Codeforces Round #439 (Div. 2) E. The Untended Antiquity 二维线段树||二维树状数组
http://codeforces.com/contest/869/problem/E 题意:n*m的矩阵,q次操作,三种类型 类型1:给指定矩阵加上围栏 类型2:给指定矩阵去掉围栏 类型3:查询两点 ...
- CodeForces 869E The Untended Antiquity 二维树状数组,随机hash
CodeForces 869E 题意: n*m 的格子,有三种操作, 1.在一个矩形周围加一层障碍.2.把一个矩形周围的障碍去掉. 3.询问两个格子是否可达. 题目保证不会有矩形障碍交叉,且去 ...
- The Untended Antiquity (二维树状数组 哈希)
题意: 3种操作 1 在左上角 (r1,c1).右下角 (r2,c2) 的矩形框上设置围墙 2 把左上角 (r1,c1).右下角 (r2,c2) 的矩形框上的围墙删掉 3 询问 (r1,c1) 能否不 ...
最新文章
- macOS下nginx配合obs做推流直播.md
- 大数据工具篇之flume1.4-安装部署指南
- apt-get remove 与 apt-get purge 区别(删除包、卸载包)
- CSS+JS鼠标悬停单元格变色
- linux 搭建github,github在linux上的环境搭建-Go语言中文社区
- 操作软件_如何提升办公软件的操作能力
- lua中元素的下标是从1开始的
- python for informatics_Python for Informatics 第11章 正则表达式一(译)
- 内核管理 之 内核管理概述
- oracle 的用户是什么,User 用户 还是 Role 角色 - Oracle 的 Public 是什么?
- 计算机考场桌子大小,自己打卧室电脑书桌最小宽度尺寸多少合适
- Flutter Card组件
- JVM初识之虚拟机内存结构
- 跟谁学 英语口语20090927疑问句
- POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM
- 有限域(3)——多项式环的商环构造有限域
- python进阶之进程池multiprocessing.Pool
- AD绘制怎么画3D封装库?
- 网络虚拟化技术与NFV
- PMP常考知识点核对单-10.沟通管理
热门文章
- 没中奖的花花卡不要扔,还有用!
- 关于移动H3_2s光猫获得超级密码的步骤以及上传本地配置文件覆盖光猫的配置文件的方法
- WhatsApp收不到验证码怎么解决呢?华为手机| 安卓手机| 苹果手机
- Excel 求满足多个条件(2个条件,3个条件,....)的行的指定列的和公式,Excel根据汉字描述生成公式工具,支持合并单元格
- 买不起房的职场人,把装修欲转移到了工位
- 3分钟了解伺服驱动器的工作原理
- 机器学习基石2-Learning to Answer Yes-No
- 多媒体——视频——从视频库中选取视频
- 淘宝开店首页装修教程分享
- 指针真的是个小机灵--将字符串中的n个字符左移,串中的前n个字符移到最后