二维

leetcode-240 搜索二维矩阵

匿名 (未验证) 提交于 2019-12-02 23:52:01
题目描述: 每一步都要想清楚,不要含糊 class Solution: def searchMatrix(self, matrix, target): """ :type matrix: List[List[int]] :type target: int :rtype: bool """ if len(matrix) < 1 or len(matrix[0])<1: return False row = len(matrix) col = len(matrix[0]) row_i, col_i = 0, col-1 while True: if matrix[row_i][col_i] == target: return True if matrix[row_i][col_i] < target and row_i < row-1: row_i += 1 elif matrix[row_i][col_i] > target and col_i > 0: col_i -= 1 else: return False

poj2019 二维RMQ裸题

匿名 (未验证) 提交于 2019-12-02 23:49:02
Cornfields Time Limit: Memory Limit: Total Submissions: 8623 Accepted: Description Input Output Sample Input 5 3 1 5 1 2 6 3 1 3 5 2 7 7 2 4 6 1 9 9 8 6 5 0 6 9 3 9 1 2 Sample Output 5C++代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 #include <set> 6 #include <vector> 7 #include <map> 8 #include <queue> 9 #include <set> 10 #include <math.h> 11 #include <algorithm> 12 using namespace std; 13 #define MAXN 250 + 5 14 int dp[MAXN][MAXN][20]; 15 int dp1[MAXN][MAXN][20]; 16 int a[MAXN][MAXN]; 17 int n,m; 18 void st(){ 19 for(int i=1;i<=n;i++) 20 for(int k=0;(1

leetcode-74-搜索二维矩阵

匿名 (未验证) 提交于 2019-12-02 23:48:02
题目描述: 方法一:二分 class Solution: def searchMatrix(self, matrix: List[List[int]], target: int) -> bool: m = len(matrix) if m==0: return False n = len(matrix[0]) left,right = 0,m*n-1 while left<=right: mid_idx = (left+right)//2 mid_element = matrix[mid_idx//n][mid_idx%n] if target == mid_element: return True else: if target<mid_element: right = mid_idx - 1 else: left = mid_idx + 1 return False

二维前缀和

匿名 (未验证) 提交于 2019-12-02 23:32:01
题目链接:https://ac.nowcoder.com/acm/problem/21862海啸 题目描述 有一个沿海地区,可以看作有n行m列的城市,第i行第j列的城市海拔为h[i][j]。 由于沿海,所以这个地区经常会发生海啸。 海啸发生时,部分城市会被淹没,具体来说,海水高度会达到d,因此海拔低于d的城市都会被淹没。 现在有q次询问,每次问你一个矩形区域中,有多少城市不会被淹没。 输入描述: 第一行三个整数n,m,d,具体含义见题目描述。接下来n行,每行m个整数,其中第i行第j列的整数为h[i][j],具体含义见题目描述。第n+2行一个整数q,表示询问数。接下来q行,每行四个整数a,b,x,y,表示询问从第a行第b列到第x行第y列的矩形地区中,有多少地区不会被淹没。即有多少个i,j,满足 a<=i<=x,b<=j<=y,且 h[i][j]>d。 输出描述: 共q行,第i行一个整数,表示第i个询问的答案。 输入 3 3 3 1 2 3 2 1 5 4 3 2 2 1 2 2 3 2 1 3 3 输出 2 3 备注: 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 #include<algorithm> 6 #include<map> 7 #include<set> 8

AcWing 前缀和 一维加二维

China☆狼群 提交于 2019-12-02 23:02:34
一维 #include<bits/stdc++.h> using namespace std; const int N=100010; int n,m; int a[N],s[N]; int main(){ ios::sync_with_stdio(false); //提高cin的读取速度,但不能是用scanf md,还是没有scanf快的 cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) s[i]=s[i-1]+a[i]; while(m--){ int l,r; cin>>l>>r; cout<<s[r]-s[l-1]<<endl; //区间和的计算 } return 0; } 二维 #include<bits/stdc++.h> using namespace std; const int N=1010; int n,m,q; int a[N][N],s[N][N]; int main() { cin>>n>>m>>q; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) cin>>a[i][j]; for(int i=1; i<=n; i++) for(int j=1; j<=m; j++) s[i][j]=s[i-1][j]+s[i][j-1]-s

数据结构(二维)方阵问题总结:ST算法、树状数组、线段树、树套树

匿名 (未验证) 提交于 2019-12-02 22:56:40
当我们把区间问题拓展到二维的方阵问题的时候,很多东西,其实就不会再去求那么难的东西了,二维问题主要考察的是从一维到二维的一个转化和拓展 然后,我们还是以静态方阵->带修方阵的顺序来介绍,至于动态方阵,我们可以参考精准覆盖问题的DLX算法中使用的数据结构,那就是舞蹈链,除此以外,在NOIP2017的day2T3,队列一题我们也可以有着启发 然而动态方阵与我们这些老套的数据结构还是脱轨的,此处就不介绍了(强行解释一波) 先说静态方阵,我们针对静态方阵无非就是查询,查询子矩阵的最值或者求子矩阵的和,对于查询子矩阵的最值来说,我们有二维的ST算法撑腰: https://www.cnblogs.com/aininot260/p/9379833.html 而对于子矩阵和的问题,二维的前缀和也是可以胜任的 考虑带修方阵问题,我们如果是修改点查询矩阵,修改矩阵查询点,修改矩阵查询矩阵,可以直接扔给二维树状数组来做,基本秒杀: https://www.cnblogs.com/aininot260/p/9336527.html 而对于修改区间查询区间最值的问题,我们交给功能强大的二维线段树来做(这里是树套树的形式,比四分树更加契合): https://www.cnblogs.com/aininot260/p/9375048.html 我们在区间问题里面曾经引出了一个带lazy tag的

宠物小精灵之收服 (二维01背包)

匿名 (未验证) 提交于 2019-12-02 22:56:40
【题目链接】      http://noi.openjudge.cn/ch0206/4978/ 【算法】     做的第一道二维的背包问题,只需开的数组增加一维以正确表述每一个状态即可。本质还是多过程决策+最优子结构+无后效性。 【代码】 1 #include <bits/stdc++.h> 2 using namespace std; 3 int n,m,k,i,j,t,minm; 4 int v[ 1010 ],u[ 510 ],dp[ 1010 ][ 510 ]; 5 int main() 6 { 7 scanf( " %d%d%d " ,&n,&m,& k); 8 minm= m; 9 for (i= 1 ;i<=k;i++) scanf( " %d%d " ,&v[i],& u[i]); 10 for (i= 1 ;i<=k;i++ ) 11 for (j=n;j>=v[i];j-- ) 12 for (t=m;t>=u[i];t-- ) 13 dp[j][t]=max(dp[j][t],dp[j-v[i]][t-u[i]]+ 1 ); 14 for (i= 0 ;i<=n;i++ ) 15 for (j= 0 ;j<=m;j++ ) 16 if (dp[i][j]==dp[n][m]&&j<minm) minm= j; 17 printf( " %d %d\n "

POJ2019:二维ST算法解决静态方阵最值问题

匿名 (未验证) 提交于 2019-12-02 22:56:40
我们其实是很有必要把ST算法拓展到二维的,因为二维的RMQ问题还是不少的 int N,B,K; int mm[ 505 ]; int val[maxn][maxn]; int dpmin[maxn][maxn][ 8 ][ 8 ]; int dpmax[maxn][maxn][ 8 ][ 8 ]; 这里的N是方阵的长宽,此处是正方形题目,然后mm是预处理出来的,方便计算指数 dpmin和dpmax就是预处理数组了 然后看一下开局预处理: void initRMQ( int n, int m) { for ( int i= 1 ;i<=n;i++ ) for ( int j= 1 ;j<=m;j++ ) dpmin[i][j][ 0 ][ 0 ]=dpmax[i][j][ 0 ][ 0 ]= val[i][j]; for ( int ii= 0 ;ii<=mm[n];ii++ ) for ( int jj= 0 ;jj<=mm[m];jj++ ) if (ii+ jj) for ( int i= 1 ;i+( 1 <<ii)- 1 <=n;i++ ) for ( int j= 1 ;j+( 1 <<jj)- 1 <=m;j++ ) { if (ii) { dpmin[i][j][ii][jj] = min(dpmin[i][j][ii- 1 ][jj],dpmin[i+( 1 <<

python 二维列表按列取元素。

匿名 (未验证) 提交于 2019-12-02 22:54:36
直接切片是不行的: >>> a= [[1,2,3], [4,5,6]] >>> a[:, 0 ] # 尝试用数组的方法读取一列失败 TypeError: list indices must be integers or slices, not tuple 我们可以直接构造: >>> b = [i[ 0 ] for i in a] # 从a中的每一行取第一个元素。 >>> print(b) [ 1 , 4 ] 文章来源: python 二维列表按列取元素。

python报错:TypeError: &#039;int&#039; object is not subscriptable

匿名 (未验证) 提交于 2019-12-02 22:51:30
检查一遍报错的所在行吧, 此报错一般是在整数上加了下标 : 比如: a = 4 c=a[2] 报错:line 2, in <module> TypeError: 'int' object is not subscriptable 再比如复杂一点的:二维 a = [1,2,3,4] c=a[2][2] 文章来源: python报错:TypeError: 'int' object is not subscriptable