十天集训洛谷专题——第一天

复习一下前缀和 差分 二分查找 学习树

单就一个专题写我会烦,所以跳着来

前缀和模板题

P8218 【深进1.例1】求区间和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

前缀和稍作改变        两个        qz[i][j],sum[i][j]

P1719 最大加权矩形 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

题解 P1719 【最大加权矩形】 - 洛谷专栏 (luogu.com.cn)

#include<bits/stdc++.h>
using namespace std;
const int N=150;
int a[N][N],sum[N][N];
int b[N][N];
int main()
{
int n;
cin>>n;
int ans=-999999999;
for(int i=1;i<=n;i++)
{
    for(int j=1;j<=n;j++)
    {
        cin>>a[i][j];
        b[i][j]=a[i][j]+b[i][j-1];
        sum[i][j]=b[i][j]+sum[i-1][j];
    }
}
for(int x1=1;x1<=n;x1++)
{
    for(int y1=1;y1<=n;y1++)
    {
        for(int x2=1;x2<=n;x2++)
        {
            for(int y2=1;y2<=n;y2++)
            {
                if(x2<x1||y2<y1)continue;
                ans=max(ans,sum[x2][y2]+sum[x1-1][y1-1]-sum[x2][y1-1]-sum[x1-1][y2]);
            }
        }
    }
}
cout<<ans;
    return 0;
}

差分模板题

P2367 语文成绩 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include<bits/stdc++.h>
using namespace std;
const int N=5000001;
int d[N];
int a[N];
int main()
{
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int n,p,min=1e9;
    cin>>n>>p;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
        
    }
     for(int i=1;i<=n;i++)
    {
       d[i]=a[i]-a[i-1];
       //差分
    }
    int x,y,z;
    while(p--)
    {
        cin>>x>>y>>z;
        d[x]+=z;
        d[y+1]-=z;
    }
    for(int i=1;i<=n;i++)
    {
        a[i]=a[i-1]+d[i];
        if(min>a[i])
        {
            min=a[i];
        }
    }
    cout<<min;
    return 0;
}

二分模板题

二分首先要求有序数列,不少都是另外开一个函数,在主函数中调用,使结构更加清晰

P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

树的深度遍历

P4913 【深基16.例3】二叉树深度 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

已知中序和前序求后序

P1827 [USACO3.4] 美国血统 American Heritage - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

dfs+邻接表

P5908 猫猫和企鹅 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

lca(最近公共祖先)模板,倍增        看懂了 开心的时候敲一下

倍增法在线求LCA(详解)_lca 大跳-CSDN博客

P3379 【模板】最近公共祖先(LCA) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

  • 朴素算法:记录下每个节点的父亲,使节点u,v一步一步地向上找父亲,直到找到相同的“祖先”,即是
    所求的答案,时间复杂度O(n)
  • 优化算法(倍增法):利用二进制的思想,想办法使一步一步向上搜索变成以2^k的向上跳。所以
    定义一个f[][]数组,使f[j][i]表示节点i的2^j倍祖先。

也可以用st算法         下回来学

LCA问题(倍增法)_倍增lca-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值