# INCLRX
```cpp=
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 15;
int a[N];
int h[N];
int n,m;
int pre[N];
int suf[N];
struct vl{
int l,r,d;
}query[N];
signed main(){
cin >> n >> m;
for(int i=1; i<=m; i++){
int l,r,d;
cin >> l >> r >> d;
h[l]+=d;
h[r+1]-=d;
query[i].l = l;
query[i].r = r;
query[i].d = d;
}
for(int i=1; i<=n; i++){
h[i] += h[i-1];
}
pre[0] = -2e18;
suf[n+1] = -2e18;
int mx;
for(int i=1; i<=n; i++){
pre[i] = max(h[i], pre[i-1]);
}
for(int i=n; i>=1; i--){
suf[i] = max(h[i], suf[i+1]);
}
mx = pre[n];
int be;
int ed;
for(int i=1; i<=n; i++){
if(h[i] == mx){
be = i;
break;
}
}
for(int i=n; i>=1; i--){
if(h[i] == mx){
ed = i;
break;
}
}
int mn = mx;
for(int i=1; i<=m; i++){
if(query[i].l <= be and ed <= query[i].r){
mn = min(mn, max(mx - query[i].d, max(pre[query[i].l - 1], suf[query[i].r + 1])));
}
}
cout << mn;
}
```
# abc
```cpp=
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1e5+5;
string s;
int n;
int a[N],f[N];
int solve (char c) {
int ans = 0;
for (int i=1; i<=n; i++) {
a[i] = a[i-1];
if (s[i] == c) a[i] += 1;
else a[i] -= 1;
int l = 1, r = i, res = i;
f[i] = min (f[i-1],a[i]);
while (r >= l) {
int mid = (r-l+1);
if (a[i] - f[mid] > 0) {
res = mid;
r = mid - 1;
}
else l = mid + 1;
}
ans = max (ans,i-res);
}
return ans;
}
void go () {
cin >> n >> s;
s = "?" + s;
int res = max ({solve('a'), solve('b'), solve ('c')});
cout << res << endl;
}
signed main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
go();
}
```
# Trung bình
```cpp=
#include<bits/stdc++.h>
#define int long long
#define double long double
using namespace std;
const int N = 1e5 + 15;
int n,k,h;
double a[N];
double pre[N];
double pre_min[N];
int bss(double x, int vl){
int l=0;
int r=vl;
int mid;
int res = -1;
while(l <= r){
mid = (l + r)/2;
if(pre_min[mid] < x){
r = mid - 1;
res = mid;
}
else l = mid + 1;
}
return res;
}
int check(double mid){
for(int i=1; i<=n; i++)a[i] -= mid;
pre_min[0] = 0;
for(int i=1; i<=n; i++){
pre[i] = pre[i-1] + a[i];
pre_min[i] = min(pre[i], pre_min[i-1]);
}
for(int i=1; i<=n; i++)a[i] += mid;
int mx = 0;
for(int i=1; i<=n; i++){
int tmp = bss(pre[i],i);
if(tmp == -1)continue;
mx = max(mx, i - tmp);
}
if(mx >= k)return true;
else return false;
}
signed main(){
cin >> n >> k >> h;
for(int i=1; i<=n; i++)cin >> a[i];
double l = 0;
double r = N;
double mid;
double res = (double)0;
for(int i=1; i<=50; i++){
mid = (l + r)/2;
int tmp = check(mid);
if(tmp == true){
l = mid;
res = mid;
}
else r = mid;
}
if(h == 0)cout << (int)res;
else cout << setprecision(03) << fixed << res;
}
```