---
# System prepended metadata

title: <h1

---


# Bài 1: Truy vấn tổng mảng tĩnh
## <span style="color:red;">Cày trâu</span>

- Với mỗi truy vấn $q$ ta sẽ thực hiện tính tổng các phần tử $x$ trong mảng từ vị trí $a$ đến $b$ như yêu cầu của đề. Độ phức tạp là $O(n \times q)$

## <span style="color:red;">Thuật AC</span>

- Ta sẽ sử dụng kĩ thuật dùng mảng để tính tổng cộng dồn. Ta sẽ tạo một mảng $prefix[i]$ để lưu tổng giá trị của các phần tử từ $1$ đến vị trí thứ $i$ -> tổng giá trị từ vị trí thứ $a$ đến vị trí thứ $b$ sẽ là $prefix[b]-prefix[a-1]$. Độ phức tạp là $O(q)$
- VD:
```=
8 4
3 2 4 5 1 1 5 3
```
Ta sẽ tạo được mảng cộng dồn $prefix[i]$ là:
```cpp=
prefix[1]=x1;
prefix[2]=prefix[1]+x2;
...
prefix[n]=prefix[n-1]+xn;
```

### Code:
```cpp=
#include<bits/stdc++.h>
using namespace std;
int prefix[200005];
int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(0);cin.tie(0);
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        int x;
        cin>>x;
        prefix[i]=prefix[i-1]+x;
    }
    for(int i=1;i<=q;i++)
    {
        int a,b;
        cin>>a>>b;
        cout<<prefix[b]-prefix[a-1]<<'\n';    
    }
}
```
# Bài 2: Mua Quà
## <span style="color:red;">Cày Trâu</span>
- Ta sẽ thử $m$ cách chọn $n$ món quà (thử hết tất cả trường hợp). Độ phức tạp là $O(C^{m}_{n})$
## <span style="color:red;">Thuật AC</span>
- Ta sẽ dùng phương pháp tham lam:
- Nhận xét: Sau khi ta sắp xếp các phần tử theo thứ tự tăng dần và bắt đầu xét từ phần tử có vị trí thứ $m$. Nếu ta lấy phần tử thứ $i$ $(m \leq i \leq n)$ là món quà có giá trị lớn nhất trong $m$ món quà mình chọn thì độ chênh lệch nhỏ nhất chính là phần tử thứ $i$ đang xét trừ cho phần tử thứ $i-m+1$. Độ phức tạp sẽ là $O(n-m+1)$
```cpp=
#include<bits/stdc++.h>
using namespace std;
long long a[100005];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        cin>>a[i];
    sort(a+1,a+1+n);//sắp xếp tăng dần các phần tử mảng a
    long long res=1e18;
    for(int i=m;i<=n;i++)
    {
        long long phu=a[i]-a[i-m+1];//giá trị chênh lệch nhỏ nhất khi a[i] là món quà có giá trị lớn nhất mình chọn
        res=min(res,phu);//lấy giá trị chênh lệch nhỏ nhất
    }
    cout<<res;
}
```

