/**
____ ____ ____ ____ ____ ____
||l |||e |||i |||n |||a |||d ||
||__|||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|/__\|
**/
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
void speed()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
const int maxn = 250010;
const ll inf = 1e18;
struct node
{
ll min_val, min_lf, min_rf;
node(ll _min_val = inf, ll _min_lf = -1, ll _min_rf = -1)
{
min_val = _min_val;
min_lf = _min_lf;
min_rf = _min_rf;
}
};
node merge_nodes(node lf, node rf)
{
if (lf.min_val < rf.min_val)
return lf;
if (rf.min_val < lf.min_val)
return rf;
node cur = lf;
if (lf.min_rf == rf.min_lf - 1)
{
cur.min_rf = rf.min_rf;
}
return cur;
}
struct segment_tree
{
node tree[4 * maxn];
ll lazy[4 * maxn];
void push_lazy(int root, int left, int right)
{
tree[root].min_val += lazy[root];
if (left != right)
{
lazy[root * 2] += lazy[root];
lazy[root * 2 + 1] += lazy[root];
}
lazy[root] = 0;
}
void build(int root, int left, int right)
{
if (left == right)
{
tree[root].min_lf = left;
tree[root].min_rf = right;
tree[root].min_val = 0;
return;
}
int mid = (left + right) / 2;
build(root * 2, left, mid);
build(root * 2 + 1, mid + 1, right);
tree[root] = merge_nodes(tree[root * 2], tree[root * 2 + 1]);
}
void update(int root, int left, int right, int qleft, int qright, int cur)
{
push_lazy(root, left, right);
if (left > qright || right < qleft)
return;
if (left >= qleft && right <= qright)
{
lazy[root] = cur;
push_lazy(root, left, right);
return;
}
int mid = (left + right) / 2;
update(root * 2, left, mid, qleft, qright, cur);
update(root * 2 + 1, mid + 1, right, qleft, qright, cur);
tree[root] = merge_nodes(tree[root * 2], tree[root * 2 + 1]);
}
node query(int root, int left, int right, int qleft, int qright)
{
push_lazy(root, left, right);
if (left > qright || right < qleft)
return node();
if (left >= qleft && right <= qright)
return tree[root];
int mid = (left + right) / 2;
return merge_nodes(query(root * 2, left, mid, qleft, qright),
query(root * 2 + 1, mid + 1, right, qleft, qright));
}
};
int n, m, q;
void input()
{
cin >> n >> m >> q;
}
struct task
{
int idx, pos;
task(int _idx = 0, int _pos = 0)
{
idx = _idx;
pos = _pos;
}
};
struct bit
{
ll fen[maxn];
void update(int pos, ll val)
{
for (int i = pos; i < maxn; i += (i & -i))
fen[i] += val;
}
ll query(int pos)
{
ll sum = 0;
for (int i = pos; i > 0; i -= (i & -i))
sum += fen[i];
return sum;
}
void range_update(int l, int r, ll v)
{
update(l, v);
update(r + 1, - v);
}
int find_kth(ll to)
{
int pos = 0;
ll sum = 0;
for (int bit = 20; bit >= 0; bit --)
{
if (pos + (1 << bit) > maxn)
continue;
ll new_sum = sum + fen[pos + (1 << bit)];
if (new_sum < to)
{
pos = pos + (1 << bit);
sum = new_sum;
}
}
return pos + 1;
}
};
vector < task > ask[maxn];
segment_tree line_tree;
bit pass_tree;
int ans[maxn];
pair < int, int > add[maxn];
vector < int > upd[maxn];
int query_cnt = 0;
void simulate()
{
line_tree.build(1, 1, n);
int t, l, r, c, a; /// careful overflow
ll k, b;
for (int i = 1; i <= q; i ++)
{
cin >> t;
if (t == 1)
{
cin >> l >> r >> c >> k;
line_tree.update(1, 1, n, l, r, k);
add[i] = {c, k};
upd[l].push_back(i);
upd[r + 1].push_back(-i);
}
else
if (t == 2)
{
cin >> l >> r >> k;
line_tree.update(1, 1, n, l, r, -k);
pass_tree.range_update(l, r, k);
node cur;
while(true)
{
cur = line_tree.query(1, 1, n, l, r);
if (cur.min_val >= 0)
break;
pass_tree.range_update(cur.min_lf, cur.min_rf, cur.min_val);
line_tree.update(1, 1, n, cur.min_lf, cur.min_rf, - cur.min_val);
}
}
else
{
cin >> a >> b;
query_cnt ++;
if (line_tree.query(1, 1, n, a, a).min_val < b)
{
ans[query_cnt] = 0;
}
else
{
///cout << "here " << query_cnt << " " << pass_tree.query(a) << " " << line_tree.query(1, 1, n, a, a).min_val << endl;
ask[a].push_back(task(query_cnt, pass_tree.query(a) + b));
}
}
}
}
bit active;
void answer_tasks()
{
for (int i = 1; i <= n; i ++)
{
for (int cur : upd[i])
{
if (cur > 0)
{
active.update(cur, add[cur].second);
}
else
{
active.update(-cur, - add[-cur].second);
}
}
for (task cur : ask[i])
{
ans[cur.idx] = add[active.find_kth(cur.pos)].first;
///cout << cur.idx << " : " << cur.shop << " " << cur.pos << endl;
}
}
for (int i = 1; i <= query_cnt; i ++)
{
cout << ans[i] << endl;
}
}
void solve()
{
input();
simulate();
answer_tasks();
}
int main()
{
speed();
solve();
return 0;
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
44120 KB |
Output is correct |
2 |
Correct |
9 ms |
44120 KB |
Output is correct |
3 |
Correct |
8 ms |
44124 KB |
Output is correct |
4 |
Correct |
8 ms |
44120 KB |
Output is correct |
5 |
Correct |
7 ms |
44120 KB |
Output is correct |
6 |
Correct |
7 ms |
43864 KB |
Output is correct |
7 |
Correct |
9 ms |
42076 KB |
Output is correct |
8 |
Correct |
8 ms |
44120 KB |
Output is correct |
9 |
Correct |
9 ms |
44120 KB |
Output is correct |
10 |
Correct |
8 ms |
42076 KB |
Output is correct |
11 |
Correct |
10 ms |
42072 KB |
Output is correct |
12 |
Correct |
8 ms |
42076 KB |
Output is correct |
13 |
Correct |
7 ms |
44120 KB |
Output is correct |
14 |
Correct |
8 ms |
44120 KB |
Output is correct |
15 |
Correct |
8 ms |
44120 KB |
Output is correct |
16 |
Correct |
9 ms |
44124 KB |
Output is correct |
17 |
Correct |
9 ms |
42072 KB |
Output is correct |
18 |
Correct |
9 ms |
44120 KB |
Output is correct |
19 |
Correct |
9 ms |
44124 KB |
Output is correct |
20 |
Correct |
8 ms |
42072 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
44120 KB |
Output is correct |
2 |
Correct |
9 ms |
44120 KB |
Output is correct |
3 |
Correct |
8 ms |
44124 KB |
Output is correct |
4 |
Correct |
8 ms |
44120 KB |
Output is correct |
5 |
Correct |
7 ms |
44120 KB |
Output is correct |
6 |
Correct |
7 ms |
43864 KB |
Output is correct |
7 |
Correct |
9 ms |
42076 KB |
Output is correct |
8 |
Correct |
8 ms |
44120 KB |
Output is correct |
9 |
Correct |
9 ms |
44120 KB |
Output is correct |
10 |
Correct |
8 ms |
42076 KB |
Output is correct |
11 |
Correct |
10 ms |
42072 KB |
Output is correct |
12 |
Correct |
8 ms |
42076 KB |
Output is correct |
13 |
Correct |
7 ms |
44120 KB |
Output is correct |
14 |
Correct |
8 ms |
44120 KB |
Output is correct |
15 |
Correct |
8 ms |
44120 KB |
Output is correct |
16 |
Correct |
9 ms |
44124 KB |
Output is correct |
17 |
Correct |
9 ms |
42072 KB |
Output is correct |
18 |
Correct |
9 ms |
44120 KB |
Output is correct |
19 |
Correct |
9 ms |
44124 KB |
Output is correct |
20 |
Correct |
8 ms |
42072 KB |
Output is correct |
21 |
Incorrect |
10 ms |
44120 KB |
Output isn't correct |
22 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
109 ms |
48384 KB |
Output is correct |
2 |
Correct |
121 ms |
48720 KB |
Output is correct |
3 |
Correct |
110 ms |
48412 KB |
Output is correct |
4 |
Correct |
121 ms |
48548 KB |
Output is correct |
5 |
Correct |
130 ms |
48720 KB |
Output is correct |
6 |
Correct |
121 ms |
48568 KB |
Output is correct |
7 |
Correct |
23 ms |
45392 KB |
Output is correct |
8 |
Correct |
24 ms |
45396 KB |
Output is correct |
9 |
Correct |
108 ms |
46928 KB |
Output is correct |
10 |
Correct |
125 ms |
48468 KB |
Output is correct |
11 |
Correct |
117 ms |
48464 KB |
Output is correct |
12 |
Correct |
121 ms |
48464 KB |
Output is correct |
13 |
Correct |
94 ms |
47440 KB |
Output is correct |
14 |
Correct |
90 ms |
48720 KB |
Output is correct |
15 |
Correct |
102 ms |
48720 KB |
Output is correct |
16 |
Correct |
112 ms |
47696 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
526 ms |
59088 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
44120 KB |
Output is correct |
2 |
Correct |
9 ms |
44120 KB |
Output is correct |
3 |
Correct |
8 ms |
44124 KB |
Output is correct |
4 |
Correct |
8 ms |
44120 KB |
Output is correct |
5 |
Correct |
7 ms |
44120 KB |
Output is correct |
6 |
Correct |
7 ms |
43864 KB |
Output is correct |
7 |
Correct |
9 ms |
42076 KB |
Output is correct |
8 |
Correct |
8 ms |
44120 KB |
Output is correct |
9 |
Correct |
9 ms |
44120 KB |
Output is correct |
10 |
Correct |
8 ms |
42076 KB |
Output is correct |
11 |
Correct |
10 ms |
42072 KB |
Output is correct |
12 |
Correct |
8 ms |
42076 KB |
Output is correct |
13 |
Correct |
7 ms |
44120 KB |
Output is correct |
14 |
Correct |
8 ms |
44120 KB |
Output is correct |
15 |
Correct |
8 ms |
44120 KB |
Output is correct |
16 |
Correct |
9 ms |
44124 KB |
Output is correct |
17 |
Correct |
9 ms |
42072 KB |
Output is correct |
18 |
Correct |
9 ms |
44120 KB |
Output is correct |
19 |
Correct |
9 ms |
44124 KB |
Output is correct |
20 |
Correct |
8 ms |
42072 KB |
Output is correct |
21 |
Correct |
109 ms |
48384 KB |
Output is correct |
22 |
Correct |
121 ms |
48720 KB |
Output is correct |
23 |
Correct |
110 ms |
48412 KB |
Output is correct |
24 |
Correct |
121 ms |
48548 KB |
Output is correct |
25 |
Correct |
130 ms |
48720 KB |
Output is correct |
26 |
Correct |
121 ms |
48568 KB |
Output is correct |
27 |
Correct |
23 ms |
45392 KB |
Output is correct |
28 |
Correct |
24 ms |
45396 KB |
Output is correct |
29 |
Correct |
108 ms |
46928 KB |
Output is correct |
30 |
Correct |
125 ms |
48468 KB |
Output is correct |
31 |
Correct |
117 ms |
48464 KB |
Output is correct |
32 |
Correct |
121 ms |
48464 KB |
Output is correct |
33 |
Correct |
94 ms |
47440 KB |
Output is correct |
34 |
Correct |
90 ms |
48720 KB |
Output is correct |
35 |
Correct |
102 ms |
48720 KB |
Output is correct |
36 |
Correct |
112 ms |
47696 KB |
Output is correct |
37 |
Correct |
83 ms |
48472 KB |
Output is correct |
38 |
Correct |
57 ms |
48296 KB |
Output is correct |
39 |
Correct |
20 ms |
45144 KB |
Output is correct |
40 |
Correct |
22 ms |
45144 KB |
Output is correct |
41 |
Correct |
90 ms |
47184 KB |
Output is correct |
42 |
Correct |
103 ms |
48716 KB |
Output is correct |
43 |
Correct |
99 ms |
48568 KB |
Output is correct |
44 |
Correct |
97 ms |
48976 KB |
Output is correct |
45 |
Correct |
82 ms |
47084 KB |
Output is correct |
46 |
Correct |
94 ms |
48720 KB |
Output is correct |
47 |
Correct |
36 ms |
47872 KB |
Output is correct |
48 |
Correct |
72 ms |
47952 KB |
Output is correct |
49 |
Correct |
82 ms |
47796 KB |
Output is correct |
50 |
Correct |
99 ms |
46672 KB |
Output is correct |
51 |
Correct |
118 ms |
47232 KB |
Output is correct |
52 |
Correct |
116 ms |
48728 KB |
Output is correct |
53 |
Correct |
74 ms |
46928 KB |
Output is correct |
54 |
Correct |
88 ms |
48972 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
59 ms |
47440 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
44120 KB |
Output is correct |
2 |
Correct |
9 ms |
44120 KB |
Output is correct |
3 |
Correct |
8 ms |
44124 KB |
Output is correct |
4 |
Correct |
8 ms |
44120 KB |
Output is correct |
5 |
Correct |
7 ms |
44120 KB |
Output is correct |
6 |
Correct |
7 ms |
43864 KB |
Output is correct |
7 |
Correct |
9 ms |
42076 KB |
Output is correct |
8 |
Correct |
8 ms |
44120 KB |
Output is correct |
9 |
Correct |
9 ms |
44120 KB |
Output is correct |
10 |
Correct |
8 ms |
42076 KB |
Output is correct |
11 |
Correct |
10 ms |
42072 KB |
Output is correct |
12 |
Correct |
8 ms |
42076 KB |
Output is correct |
13 |
Correct |
7 ms |
44120 KB |
Output is correct |
14 |
Correct |
8 ms |
44120 KB |
Output is correct |
15 |
Correct |
8 ms |
44120 KB |
Output is correct |
16 |
Correct |
9 ms |
44124 KB |
Output is correct |
17 |
Correct |
9 ms |
42072 KB |
Output is correct |
18 |
Correct |
9 ms |
44120 KB |
Output is correct |
19 |
Correct |
9 ms |
44124 KB |
Output is correct |
20 |
Correct |
8 ms |
42072 KB |
Output is correct |
21 |
Incorrect |
10 ms |
44120 KB |
Output isn't correct |
22 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
44120 KB |
Output is correct |
2 |
Correct |
9 ms |
44120 KB |
Output is correct |
3 |
Correct |
8 ms |
44124 KB |
Output is correct |
4 |
Correct |
8 ms |
44120 KB |
Output is correct |
5 |
Correct |
7 ms |
44120 KB |
Output is correct |
6 |
Correct |
7 ms |
43864 KB |
Output is correct |
7 |
Correct |
9 ms |
42076 KB |
Output is correct |
8 |
Correct |
8 ms |
44120 KB |
Output is correct |
9 |
Correct |
9 ms |
44120 KB |
Output is correct |
10 |
Correct |
8 ms |
42076 KB |
Output is correct |
11 |
Correct |
10 ms |
42072 KB |
Output is correct |
12 |
Correct |
8 ms |
42076 KB |
Output is correct |
13 |
Correct |
7 ms |
44120 KB |
Output is correct |
14 |
Correct |
8 ms |
44120 KB |
Output is correct |
15 |
Correct |
8 ms |
44120 KB |
Output is correct |
16 |
Correct |
9 ms |
44124 KB |
Output is correct |
17 |
Correct |
9 ms |
42072 KB |
Output is correct |
18 |
Correct |
9 ms |
44120 KB |
Output is correct |
19 |
Correct |
9 ms |
44124 KB |
Output is correct |
20 |
Correct |
8 ms |
42072 KB |
Output is correct |
21 |
Incorrect |
10 ms |
44120 KB |
Output isn't correct |
22 |
Halted |
0 ms |
0 KB |
- |