题解:数组开了 6×107 能 AC
我的:数组开了 4×107 MLE?
我的代码:
# include <bits/stdc++.h>
# define old_six \
ios::sync_with_stdio (0);\
\
cin.tie (0);\
\
cout.tie (0);
# define ffor(i,name) \
for (auto i = name.begin (); i != name.end (); ++ i)
# define iter(type) \
type :: iterator
# define reg register
using namespace std;
typedef size_t st;
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
int n, m, lazy[40000005], x, y;
bool op;
void push_down (int x, int mid, int l, int r) {
lazy[x << 1] += lazy[x];
lazy[(x << 1) + 1] += lazy[x];
lazy[x] = 0;
return ;
}
void tamper (int now, int l, int r, int x, int y) {
if (l == x && r == y) {
++ lazy[now];
return ;
}
reg int mid = l + r >> 1;
push_down (now, mid, l, r);
if (mid >= y)
tamper (now << 1, l, mid, x, y);
else if (mid < x)
tamper ((now << 1) + 1, mid + 1, r, x, y);
else
tamper (now << 1, l, mid, x, mid), tamper ((now << 1) + 1, mid + 1, r, mid + 1, y);
return ;
}
int find (int now, int l, int r, int x) {
if (l == r)
return lazy[now];
reg int mid = l + r >> 1;
push_down (now, mid, l, r);
if (mid >= x)
return find (now << 1, l, mid, x);
return find ((now << 1) + 1, mid + 1, r, x);
}
int main () {
old_six
cin >> n >> m;
while (m --) {
cin >> op >> x;
if (op)
cout << find (1, 1, n, x) << '\n';
else
cin >> y, tamper (1, 1, n, x, y);
}
return 0;
}