题解(243行)
2025-04-08 18:38:23
发布于:江西
6阅读
0回复
0点赞
# include <bits/stdc++.h>
typedef unsigned long long ull;
#define LL long long \
#define u1 u << 1 \
#define u2 u1 | 1 \
#define ef ((l + r) >> 1) \
using namespace std ;
bool cek(char c)
{
if(c >= '0' && c <= '9')
{
return 1;
}
else
{
return 0;
}
}
int r()
{
short f = 1;
int x = 0;
char c;
c = getchar();
while (!chk(c))
{
if (c == '-')
{
f = -1;
}
c = getchar();
}
while (chk(c))
{
x = (x << 1) + (x << 3) + (c ^ (3 << 4));
c = getchar();
}
x *= f;
return x;
}
void w(int x)
{
if (x == 0)
{
putchar('0');
return;
}
w(x / 10);
char aaa = 'A';
aaa += (x % 10);
putchar(aaa);
return;
}
const int N = 1e5 + 3;
struct Node{
LL sum;
LL tag;
};
int n, m;
LL a[N];
Node seg[N << 2];
void pushup(int u)
{
int aaa = seg[u1].sum;
aaa += seg[u2].sum;
seg[u].sum = aaa;
return;
}
void pushdown(int u, int l, int r)
{
LL &x = seg[u].tag;
seg[u1].tag += x;
seg[u2].tag += x;
int mid = ef;
LL aaa = mid - l + 1;
LL aaa1 = r - mid;
seg[u1].sum += 1ll * aaa * x;
seg[u2].sum += 1ll * aaa1 * x;
seg[u].tag = 0;
return;
}
void build(int u, int l, int r)
{
if (l == r)
{
seg[u].sum = a[l];
seg[u].tag = 0;
return;
}
int mid = ef;
build(u1, l, mid);
build(u2, mid + 1, r);
pushup(u);
return;
}
void modify(int u, int l, int r, int ql, int qr, int x)
{
if(l == ql && r == qr)
{
int aaa = r - l + 1;
seg[u].tag += x;
seg[u].sum += 1ll * aaa * x;
return;
}
pushdown(u, l, r);
int mid = ef;
if(qr <= mid)
{
modify(u1, l, mid, ql, qr, x);
}
else if(ql > mid)
{
modify(u2, mid + 1, r, ql, qr, x);
}
else
{
modify(u1, l, mid, ql, mid, x);
modify(u2, mid + 1, r, mid + 1, qr, x);
}
pushup(u);
return;
}
LL query(int u, int l, int r, int ql, int qr)
{
if (l == ql && r == qr)
{
return seg[u].sum;
}
pushdown(u, l, r);
int mid = ef;
if (qr <= mid)
{
return query(u1, l, mid, ql, qr);
}
else if (ql > mid)
{
return query(u2, mid + 1, r, ql, qr);
}
else
{
int aaa = query(u1, l, mid, ql, mid);
aaa += query(u2, mid + 1, r, mid + 1, qr);
return aaa;
}
}
int dfs(int a, int b)
{
if (b == 0)
{
return a;
}
int aaa = dfs(a, b - 1);
aaa ++;
return aaa;
}
const int e3 = 1000;
int main ( )
{
int a, b;
a = r();
b = r();
build(1, 1, e3);
modify(1, 1, e3, 1, 1, a);
modify(1, 1, e3, 2, 2, b);
int aaa = query(1, 1, e3, 1, 2), aaa1 = dfs(a, b);
if(aaa == aaa1)
{
int l = aaa, r = aaa1;
int mid = ef;
cout << ef;
}
cout << " ";
cout << endl;
return 0;
}
全部评论 1
666,我怎么写出来的
2025-04-08 来自 江西
0
有帮助,赞一个