小工具知识网

当前位置: 首页 > 行业知识 > Luogu【算法2-1】前缀和、差分与离散化

行业知识

Luogu【算法2-1】前缀和、差分与离散化

2026-10-19 00:20:17 来源:互联网转载

Problem A

思路分析

���单的前缀和板子,不多说。

AC代码

#includeusing namespace std;using ll =unsigned long long;ll n, m;ll a[200000];ll pre[200000], sum[200000];int main() {cin >> n;for (ll i = 1; i cin > a[i];pre[i] = a[i] + pre[i - 1];}cin >> m;for (ll i = 1; i ll l = 0, r = 0;cin > l >> r;sum[i] = pre[r] - pre[l - 1];}for (ll i = 1; i cout cin  n;for (int i = 1; i for (int j = 1; j cin  squ[i][j];//lin[i][j]表示的是第i行前j个(其实也就是第j列)数字的和lin[i][j] = lin[i][j - 1] + squ[i][j];//sum[i][j]表示的是以第1行第1个数字为左上角,以第i行第j个数字为右下角的矩形的面积。sum[i][j] = sum[i - 1][j] + lin[i][j];}}//分别枚举左上角的坐标(x1,y1)和右下角(x2,y2)的坐标。for (int x1 = 1; x1 for (int y1 = 1; y1 for (int x2 = 1; x2 for (int y2 = 1; y2 if (x2 x2>>y2;        //上面提到的操作        mat[x1][y1]++;        mat[x2+1][y1]--;        mat[x1][y2+1]--;        mat[x2+1][y2+1]++;    }    for(int i=1;i        for(int j=1;j            //求前缀和,处理出每个点的值            mat[i][j]+=mat[i-1][j]+mat[i][j-1]-mat[i-1][j-1];            coutcin  n; for (int i = 1; i cin  a[i]  b[i];}sort(a + 1, a + 1 + n);sort(b + 1, b + 1 + n);for (int i = 1; i l += b[i] - a[i];//注意iif (b[i]  a[i + 1]) {l -= b[i] - a[i + 1];}}}cout cin  n  m > c;for (ll i = 1; i for (ll j = 1; j cin  map[i][j];//求前缀和sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + map[i][j];}}for (int i = c; i for (int j = c; j     //枚举以(i,j)为右下角、边长为c的正方形的面积,注意更新坐标if (sum[i][j] - sum[i - c][j] - sum[i][j - c] + sum[i - c][j - c]  maxn) {maxn = sum[i][j] - sum[i - c][j] - sum[i][j - c] + sum[i - c][j - c];nx = i - c + 1;ny = j - c + 1;}}}cout 

上一篇:华硕Win10体验,技术与创新的极致融合

下一篇:小黄车为什么滴滴的响?