2023 rcpc

This commit is contained in:
2024-04-22 16:45:09 +03:00
parent a0ddb657b7
commit 156202ada0
61 changed files with 4462 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,a[200005],b[200005];
int spa[200005],spb[200005];
int nxt[200005];
int rmq[200005][20];
int lg[200005];
int v[200005],spv[200005];
void calc_nxt()
{
///daca astept la poz i, astept la urmatoarea poz pentru care sum(a[j] de la i + 1 la p) > sum(b[j] de la i la p - 1)
///fie v[j] = a[j] - b[j - 1]
///de la pozitia i, astept la prima pozitie la care suma(v[j] de la i + 1 la p) > 0
///din sume partiale pe p, dupa pozitia i mai astept la prima pozitie cu spv[p] > spv[i]
for (int i = 1; i <= n; i++)
v[i] = a[i] - b[i - 1];
for (int i = 1; i <= n; i++)
spv[i] = spv[i - 1] + v[i];
spv[n + 1] = 1e18;
stack<int>s;
s.push(n + 1);
for (int i = n; i >= 1; i--)
{
while (spv[i] >= spv[s.top()])
s.pop();
nxt[i] = s.top();
s.push(i);
}
}
signed main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i],spa[i] = a[i] + spa[i - 1];
for (int i = 1; i <= n; i++)
cin >> b[i],spb[i] = b[i] + spb[i - 1];
calc_nxt();
for (int i = 0; i <= 19; i++)
rmq[n + 1][i] = n + 1;
for (int i = 2; i <= n; i++)
lg[i] = 1 + lg[i / 2];
for (int i = 1; i <= n; i++)
rmq[i][0] = nxt[i];
for (int j = 1; j <= lg[n]; j++)
for (int i = 1; i <= n; i++)
rmq[i][j] = rmq[rmq[i][j - 1]][j - 1];
int q;
cin >> q;
for (int i = 1; i <= q; i++)
{
int l,r;
cin >> l >> r;
int pos = l;
for (int j = lg[n]; j >= 0; j--)
if (rmq[pos][j] <= r)
pos = rmq[pos][j];
int timp = (spb[r] - spb[pos - 1]) - (spa[r] - spa[pos]);
cout << timp << '\n';
}
return 0;
}