前缀和练习题解

/*
	author:@bzdhxs
	date:2021//
	URL:
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
#define _orz ios::sync_with_stdio(false),cin.tie(0)
#define mem(str,num) memset(str,num,sizeof(str))
#define forr(i,a,b) for(int i = a; i <= b;i++)
using ll = long long;
using ull = unsigned long long;
const int inf = 0x3f3f3f3f;
const int N = 1e6+10;
int a[N],b[N];
int main()
{
    
    

	int n,k;  scanf("%d %d",&n,&k);
	for(int i = 1; i <= n;i++)	scanf("%d",&a[i]);
	for(int i = 1; i <= n;i++) b[i] = b[i-1] + a[i];
	int res = 0;
	for(int i = 1; i <= n; i++)
		if(i+k-1 <= n) res = max(res,b[i+k-1]-b[i-1]);
	printf("%d\n",res);
	return 0;
}
/*
    author:@bzdhxs
    date:2021//
    URL:
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
#define _orz ios::sync_with_stdio(false),cin.tie(0)
#define mem(str,num) memset(str,num,sizeof(str))
#define forr(i,a,b) for(int i = a; i <= b;i++)
using ll = long long;
using ull = unsigned long long;
const int inf = 0x3f3f3f3f;
const int N = 1e4+10;
int a[N],b[N];
int main()
{
    
    
    int n; scanf("%d",&n);
    for(int i = 1; i <= n;i++) scanf("%d",&a[i]);
    for(int i = 1; i <= n; i++) b[i] = a[i] - a[i-1];
    for(int i = 1; i <= n;i++) cout << b[i] <<" ";

    return 0;
}
/*
    author:@bzdhxs
    date:2021//
    URL:
*/
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
#define _orz ios::sync_with_stdio(false),cin.tie(0)
#define mem(str,num) memset(str,num,sizeof(str))
#define forr(i,a,b) for(int i = a; i <= b;i++)
using ll = long long;
using ull = unsigned long long;
const int inf = 0x3f3f3f3f;
const int N = 1e4+10;
int a[N],b[N];
int cnt = 0;
void solve(){
    
    
    cnt++;
    int n; scanf("%d",&n);

    for(int i = 1; i <= n;i++) scanf("%d",&a[i]);
    for(int i = 1; i <= n;i++)  b[i] = b[i-1] + a[i];
    int res = inf;
    for(int k = 1; k <= n;k++){
    
    
        int t = inf;
        for(int i = 1; i <= n-k+1 ;i++){
    
     // 注意n - k + 1
            t = min(t,abs(b[i+k-1]-b[i-1]));
        } 
        res = min(t,res);
    }
    printf("Case %d: %d\n",cnt,res);
}

int main()
{
    
    
    int t; scanf("%d",&t);
    while(t--) solve();
    return 0;
}
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N = 1e5+100;
int a[N],b[N];

int n,m;
int main()
{
    
    
    //cin >> n >> m;
    scanf("%d %d",&n,&m);
    for(int i = 1; i <= n ;i++)
    {
    
    
        //cin >> a[i];
        scanf("%d",&a[i]);
        b[i] = a[i] - a[i-1];
    }
    int l,r,k;
    
    while (m -- )
    {
    
    
        scanf("%d %d %d",&l,&r,&k);
        //cin >> l >> r >> k;
        b[l] += k;
        b[r+1] -= k;
    }
    
    for(int i = 1; i <= n; i++)
    {
    
    
        a[i] = a[i-1] + b[i];
        printf("%d ",a[i]);
    }
    return 0;
}
/*Nqvqr st0p Th1nk1ng
我的代码很大,评测姬你忍一下~*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mem(str,num) memset(str,num,sizeof(str))
#define forr(i,a,b) for(int i = a; i <= b;i++)
const int INF = 0x3f3f3f3f;
const long long mod = 1e9+7;
const int N = 1e6+10;
int f[N],a[N];
void so1ve()
{
    
    
    int n,m; scanf("%d %d",&n,&m);
    
    for(int i = 0; i <= n;i++) f[i] = 1;
    a[0] = 1;
    for(int i = 1; i <= n;i++) a[i] = f[i] - f[i-1]; // 构造差分数组
    while(m--){
    
    
        int l,r; scanf("%d %d",&l,&r);
        a[l]--;
        a[r+1]++;
    }
    int res = (a[0] <= 0?0:a[0]);
    for(int i = 1; i <= n;i++){
    
    
        a[i] += a[i-1];
        if(a[i] <= 0) continue;
        res += a[i];
    }
    cout << res << endl;
}
int main()
{
    
    
    int t;cin>>t;
    while(t--) so1ve();
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_51687628/article/details/121114872