题目链接:

https://www.nowcoder.com/acm/contest/140/J

思路:

都写在代码注释里了,非常好懂。。

for_each函数可以去看一下,遍历起vector数组比较方便,用for(int i = 0;i < q[i].size();i++)的话,是会有一些弊端的,虽然对于这道题应该没什么影响,但最好规范下。

耗时:2072ms

实现代码:

#include<bits/stdc++.h>
using namespace std;
const int M = 1e6+5;
vector<int>t[M];
int n,m;
vector<int>bit[M];
int lowbit(int x){return x&-x;
}struct node{int a,b,c,d;node(){}node(int a1,int b1,int c1,int d1):a(a1),b(b1),c(c1),d(d1){}
};struct node1{int i,j;node1(){}node1(int i1,int j1):i(i1),j(j1){}
};vector<node1>k[M];
vector<node>q[M];void add(int x,int y,int z){for(int i=x;i<=n;i+=lowbit(i)){for(int j=y;j<=m;j+=lowbit(j))bit[i][j]+=z;}
}
void update(int x1,int y1,int x2,int y2,int z){add(x1,y1,z);add(x2+1,y2+1,z);add(x1,y2+1,-z);add(x2+1,y1,-z);
}
int sum(int x,int y){int res=0;for(int i=x;i;i-=lowbit(i)){for(int j=y;j;j-=lowbit(j)){res+=bit[i][j];}}return res;
}template <class T>
inline void scan_d(T &ret)
{char c;ret = 0;while ((c = getchar()) < '0' || c > '9');while (c >= '0' && c <= '9'){ret = ret * 10 + (c - '0'), c = getchar();}
}template <class T>
inline void print_d(T x)
{if (x > 9){print_d(x / 10);}putchar(x % 10 + '0');
}void fun1(node now){update(now.a,now.b,now.c,now.d,1);
}void fun2(node now){update(now.a,now.b,now.c,now.d,-1);
}int num;
void fun3(node1 now){if(sum(now.i,now.j)) num++;
}int main()
{int t,x,a,b,c,d,z;scan_d(n); scan_d(m); scan_d(t);for(int i = 1;i <= n;i ++) bit[i].resize(m+1); //预开空间for(int i = 1;i <= n;i ++) {for(int j = 1;j <= m;j ++){scan_d(x);k[x].push_back(node1(i,j));  //需要x种类药的花的坐标
        }}for(int i = 1;i <= t;i ++){scan_d(a);scan_d(b),scan_d(c),scan_d(d);scan_d(z);update(a,b,c,d,1);  //标记代表这个区间被z种类药撒了q[z].push_back(node(a,b,c,d)); //存下z种类药一共撒了哪些区间
    }num = 0;for(int i = 1;i <= n*m;i ++){ //遍历所有种类的药if(k[i].size()){  //存在需要ki种类药的花for_each(q[i].begin(),q[i].end(),fun2); //将ki种类药撒的区间造成的影响全部清0for_each(k[i].begin(),k[i].end(),fun3);  //遍历需要k种类药的所有花的坐标如果这个坐标依旧为1,那么代表撒在它上面的并不是k种类的药,这朵花会死亡,num++;for_each(q[i].begin(),q[i].end(),fun1);  //再将ki种类药撒的区间还原
        }}print_d(num);printf("\n");return 0;
}

转载于:https://www.cnblogs.com/kls123/p/9350405.html

牛客网暑期ACM多校训练营(第二场)J farm (二维树状数组)相关推荐

  1. 牛客网暑期ACM多校训练营(第二场):J. farm(暴力)

    链接:https://www.nowcoder.com/acm/contest/140/J 来源:牛客网 题目描述 White Rabbit has a rectangular farmland of ...

  2. 2018牛客网暑期ACM多校训练营第二场 D - money(贪心)

    题目链接 https://www.nowcoder.com/acm/contest/140#question [题目描述] White Cloud is exercising in the playg ...

  3. 牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph

    牛客网暑期ACM多校训练营(第十场)F.Rikka with Line Graph 做法:\(G'\) 中的对应原图两条边(a,b) (c,d)的最短路为: \[ w[a][b] + w[c][d] ...

  4. 牛客网暑期ACM多校训练营(第九场)

    牛客网暑期ACM多校训练营(第九场) A. Circulant Matrix 做法:看到下标 \(xor\) 这种情况就想 \(FWT\),可是半天没思路,于是放弃了..其实这个 \(n\) 疯狂暗示 ...

  5. 牛客网暑期ACM多校训练营(第五场)

    牛客网暑期ACM多校训练营(第五场) A. gpa 二分答案,然后就转化为是否满足 \(\frac {\sum s[i]c[i]}{\sum s[i]} ≥ D\), \(\sum s[i]c[i] ...

  6. 牛客网暑期ACM多校训练营(第三场)

    牛客网暑期ACM多校训练营(第三场) A. PACM Team 01背包,输出方案,用bool存每种状态下用的哪一个物品,卡内存.官方题解上,说用char或者short就行了.还有一种做法是把用的物品 ...

  7. 牛客网暑期ACM多校训练营(第一场)

    牛客网暑期ACM多校训练营(第一场) A. Monotonic Matrix 考虑0和1的分界线,1和2的分界线,发现问题可以转化为两条不互相穿过的路径的方案数(可重叠),题解的做法就是把一条路径斜着 ...

  8. 牛客网暑期ACM多校训练营(第十场)D Rikka with Prefix Sum

    链接:https://www.nowcoder.com/acm/contest/148/D 来源:牛客网 题目描述 Prefix Sum is a useful trick in data struc ...

  9. 牛客网暑期ACM多校训练营(第三场)A.PACM Team(多重01背包)

    链接:https://www.nowcoder.com/acm/contest/141/A 来源:牛客网 题目描述 Eddy was a contestant participating in ACM ...

最新文章

  1. 关于数据集 使用PutCollect后m_Recordset-Update();数据集更新报错的问题
  2. SVN中update to revision与revert to revision的区别
  3. RegConnectRegistry函数
  4. 内存位置访问无效 midas.dll_内存虚拟化介绍
  5. 【ECS最佳实践】基于多块云盘构建LVM逻辑卷
  6. 什么是工业微型计算机,2008年(下)全国自考工业用微型计算机试卷02241
  7. ssh整合之四单独搭建struts的运行环境
  8. 遍历josn的三种方式
  9. 二叉搜索树的操作题集
  10. GB28181国标流媒体服务语音对讲-前端页面采集语音调用接口示例
  11. PSV破解流程+软件游戏安装(最简单/最快的方法整理,已测支持3.65~3.68,理论上支持全系列版本)
  12. git commit 提交信息写错,怎么更改?
  13. 域控服务器里没有internet时间,加入域之后,【Internet 时间】选项没有了
  14. 【CF833D】Red-Black Cobweb
  15. 卷妹的成长日记之javaweb day2
  16. 定位综合案例-淘宝轮播图
  17. 关于PL-2303HX驱动问题
  18. tdsql完全兼容mysql吗_金融级数据库 TDSQL:已支持日 3.6亿+ 的交易量,TPS 10万+
  19. 2019年秋季计算机应用基础,天大2019年秋季考试《计算机应用基础》在线考核试题【满分答案】...
  20. 安卓可上下滑动改变数值的折线图(基于hellochart)

热门文章

  1. date js 半年_JavaScript Date对象
  2. org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException:
  3. 同一接口有多个实现类,怎么来注入一个指定的实现?@Resource、@Autowired、@Qualifier
  4. 计算机画面的音乐素材,音效素材:高科技用户界面UI点触计算机数据分析全息音效合集...
  5. php 缩略图 等比例 不失真,PHP自适应宽高度等比例缩略图函数 (无裁切)
  6. 计算机报名显示事务已被锁死,ORA-01591错误处理: 锁定已被有问题的分配事务处理20.18.156406挂起(转载)...
  7. swagger 使用指南
  8. nginx+asp.net mvc的配置
  9. 系统设计原则的重要性_设计原则的重要性及其对好的设计的影响
  10. 程序员如何面试才能拿到offer