#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
using namespace std;
using namespace __gnu_pbds;
#define F first
#define S second
#define forn(i, n) for(int i = 0; i < n; ++i)
#define forbn(i, b, n) for(int i = b; i < n; ++i)
#define sz(v) (int)v.size()
#define pb push_back
#define eb emplace_back
#define all(v) v.begin(), v.end()
#define min3(a, b, c) min(a, min(b, c))
#define at(m, k) (m.find(k) != m.end() ? m[k] : 0)
typedef pair<int, int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef long long ll;
typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
template <class T> inline void mineq(T &a, T b) { a = min(a, b); }
template <class T> inline void maxeq(T &a, T b) { a = max(a, b); }
const int MX = 200 * 1000 + 10;
int n, q;
int a[MX], b[MX], c[MX];
vi a2i[MX], b2i[MX];
int cl[MX];
int S = 450;
struct Fenw {
int mx = MX - 1;
vi bit;
Fenw() {
bit.assign(MX, 0);
}
void upd(int i, int v) {
for(i += 1; i <= mx; i += i & (-i))
bit[i] += v;
}
int psum(int i) {
int sum = 0;
for(; i > 0; i -= i & (-i))
sum += bit[i];
return sum;
}
int query(int cc) {
return psum(mx) - psum(cc);
}
};
bool cmp(pair<ii, ii> p1, pair<ii, ii> p2) {
ii a = p1.F, b = p2.F;
if(cl[a.F] != cl[b.F])
return a.F < b.F;
return (cl[a.F] % 2) ? a.S > b.S : a.S < b.S;
}
struct Mo {
int l, r;
Fenw fenw;
void init(int l, int r) {
this->l = l, this->r = r;
forn(i, n)
if(a[i] >= l && b[i] >= r)
fenw.upd(c[i], 1);
}
void add_left() {
l -= 1;
for(int i: a2i[l])
if(b[i] >= r)
fenw.upd(c[i], 1);
else
break;
}
void pop_left() {
for(int i: a2i[l])
if(b[i] >= r)
fenw.upd(c[i], -1);
else
break;
l += 1;
}
void add_right() {
for(int i: b2i[r])
if(a[i] >= l)
fenw.upd(c[i], -1);
else
break;
r += 1;
}
void pop_right() {
r -= 1;
for(int i: b2i[r])
if(a[i] >= l)
fenw.upd(c[i], 1);
else
break;
}
int get_ans(int cc) {
return fenw.query(cc);
}
};
void comp(vi& v) {
set<int> sl;
for(int el: v)
sl.insert(el);
int ct = 0;
map<int, int> v2i;
for(int el: sl)
v2i[el] = ct++;
for(int& el: v)
el = v2i[el];
}
bool cmp1(int i, int j) {
return b[i] > b[j];
}
bool cmp2(int i, int j) {
return a[i] > a[j];
}
void solve()
{
cin >> n >> q;
vi as, bs, cs;
forn(i, n) {
int x, y;
cin >> x >> y;
as.pb(x);
bs.pb(y);
cs.pb(x + y);
}
forn(_, q) {
int l, r, cc;
cin >> l >> r >> cc;
as.pb(l);
bs.pb(r);
cs.pb(cc);
}
comp(as);
comp(bs);
comp(cs);
forn(i, n)
{
a[i] = as[i];
b[i] = bs[i];
c[i] = cs[i];
a2i[a[i]].pb(i);
b2i[b[i]].pb(i);
}
forn(i, MX) {
sort(all(a2i[i]), cmp1);
sort(all(b2i[i]), cmp2);
}
int ct = 0, i = 0;
forn(l, MX) {
if(ct != 0 && ct + sz(a2i[l]) > S) {
ct = sz(a2i[l]);
i += 1;
} else {
ct += sz(a2i[l]);
}
cl[l] = i;
}
vector<pair<ii, ii>> qs;
forn(ind, q) {
int l = as[ind + n], r = bs[ind + n], cc = cs[ind + n];
qs.pb({{l, r}, {cc, ind}});
}
sort(all(qs), cmp);
Mo mo;
vi ans(q);
forn(i, q) {
int l = qs[i].F.F, r = qs[i].F.S, cc = qs[i].S.F, ind = qs[i].S.S;
if(i == 0) {
mo.init(l, r);
}
else {
while(l != mo.l || r != mo.r) {
if(l < mo.l)
mo.add_left();
else if(r > mo.r)
mo.add_right();
else if(l > mo.l)
mo.pop_left();
else
mo.pop_right();
}
}
ans[ind] = mo.get_ans(cc);
// cout << l << ' ' << r << ' ' << ans[ind] << '\n';
}
for(int el: ans)
cout << el << '\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
// freopen("haybales.in", "r", stdin);
// freopen("haybales.out", "w", stdout);
int t = 1;
// cin >> t;
while(t--)
solve();
}
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
11212 KB |
Output is correct |
2 |
Correct |
6 ms |
11212 KB |
Output is correct |
3 |
Correct |
6 ms |
11216 KB |
Output is correct |
4 |
Correct |
6 ms |
11212 KB |
Output is correct |
5 |
Correct |
7 ms |
11212 KB |
Output is correct |
6 |
Correct |
7 ms |
11212 KB |
Output is correct |
7 |
Correct |
29 ms |
12084 KB |
Output is correct |
8 |
Correct |
29 ms |
11980 KB |
Output is correct |
9 |
Correct |
30 ms |
12108 KB |
Output is correct |
10 |
Correct |
27 ms |
11980 KB |
Output is correct |
11 |
Correct |
15 ms |
11980 KB |
Output is correct |
12 |
Correct |
10 ms |
11596 KB |
Output is correct |
13 |
Correct |
28 ms |
12088 KB |
Output is correct |
14 |
Correct |
27 ms |
12044 KB |
Output is correct |
15 |
Correct |
29 ms |
11996 KB |
Output is correct |
16 |
Correct |
14 ms |
11992 KB |
Output is correct |
17 |
Correct |
29 ms |
11996 KB |
Output is correct |
18 |
Correct |
8 ms |
11468 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1689 ms |
22744 KB |
Output is correct |
2 |
Correct |
1653 ms |
22756 KB |
Output is correct |
3 |
Correct |
1704 ms |
22756 KB |
Output is correct |
4 |
Correct |
937 ms |
22720 KB |
Output is correct |
5 |
Correct |
292 ms |
22640 KB |
Output is correct |
6 |
Correct |
104 ms |
18648 KB |
Output is correct |
7 |
Correct |
834 ms |
22748 KB |
Output is correct |
8 |
Correct |
1016 ms |
22876 KB |
Output is correct |
9 |
Correct |
918 ms |
23208 KB |
Output is correct |
10 |
Correct |
247 ms |
22576 KB |
Output is correct |
11 |
Correct |
873 ms |
22548 KB |
Output is correct |
12 |
Correct |
69 ms |
18260 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1689 ms |
22744 KB |
Output is correct |
2 |
Correct |
1653 ms |
22756 KB |
Output is correct |
3 |
Correct |
1704 ms |
22756 KB |
Output is correct |
4 |
Correct |
937 ms |
22720 KB |
Output is correct |
5 |
Correct |
292 ms |
22640 KB |
Output is correct |
6 |
Correct |
104 ms |
18648 KB |
Output is correct |
7 |
Correct |
834 ms |
22748 KB |
Output is correct |
8 |
Correct |
1016 ms |
22876 KB |
Output is correct |
9 |
Correct |
918 ms |
23208 KB |
Output is correct |
10 |
Correct |
247 ms |
22576 KB |
Output is correct |
11 |
Correct |
873 ms |
22548 KB |
Output is correct |
12 |
Correct |
69 ms |
18260 KB |
Output is correct |
13 |
Correct |
1774 ms |
26192 KB |
Output is correct |
14 |
Correct |
1736 ms |
25200 KB |
Output is correct |
15 |
Correct |
1663 ms |
22748 KB |
Output is correct |
16 |
Correct |
963 ms |
22716 KB |
Output is correct |
17 |
Correct |
324 ms |
22688 KB |
Output is correct |
18 |
Correct |
112 ms |
18748 KB |
Output is correct |
19 |
Correct |
1717 ms |
26184 KB |
Output is correct |
20 |
Correct |
1675 ms |
25512 KB |
Output is correct |
21 |
Correct |
1213 ms |
26192 KB |
Output is correct |
22 |
Correct |
242 ms |
22564 KB |
Output is correct |
23 |
Correct |
936 ms |
22552 KB |
Output is correct |
24 |
Correct |
78 ms |
18168 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
11212 KB |
Output is correct |
2 |
Correct |
6 ms |
11212 KB |
Output is correct |
3 |
Correct |
6 ms |
11216 KB |
Output is correct |
4 |
Correct |
6 ms |
11212 KB |
Output is correct |
5 |
Correct |
7 ms |
11212 KB |
Output is correct |
6 |
Correct |
7 ms |
11212 KB |
Output is correct |
7 |
Correct |
29 ms |
12084 KB |
Output is correct |
8 |
Correct |
29 ms |
11980 KB |
Output is correct |
9 |
Correct |
30 ms |
12108 KB |
Output is correct |
10 |
Correct |
27 ms |
11980 KB |
Output is correct |
11 |
Correct |
15 ms |
11980 KB |
Output is correct |
12 |
Correct |
10 ms |
11596 KB |
Output is correct |
13 |
Correct |
28 ms |
12088 KB |
Output is correct |
14 |
Correct |
27 ms |
12044 KB |
Output is correct |
15 |
Correct |
29 ms |
11996 KB |
Output is correct |
16 |
Correct |
14 ms |
11992 KB |
Output is correct |
17 |
Correct |
29 ms |
11996 KB |
Output is correct |
18 |
Correct |
8 ms |
11468 KB |
Output is correct |
19 |
Correct |
1689 ms |
22744 KB |
Output is correct |
20 |
Correct |
1653 ms |
22756 KB |
Output is correct |
21 |
Correct |
1704 ms |
22756 KB |
Output is correct |
22 |
Correct |
937 ms |
22720 KB |
Output is correct |
23 |
Correct |
292 ms |
22640 KB |
Output is correct |
24 |
Correct |
104 ms |
18648 KB |
Output is correct |
25 |
Correct |
834 ms |
22748 KB |
Output is correct |
26 |
Correct |
1016 ms |
22876 KB |
Output is correct |
27 |
Correct |
918 ms |
23208 KB |
Output is correct |
28 |
Correct |
247 ms |
22576 KB |
Output is correct |
29 |
Correct |
873 ms |
22548 KB |
Output is correct |
30 |
Correct |
69 ms |
18260 KB |
Output is correct |
31 |
Correct |
1774 ms |
26192 KB |
Output is correct |
32 |
Correct |
1736 ms |
25200 KB |
Output is correct |
33 |
Correct |
1663 ms |
22748 KB |
Output is correct |
34 |
Correct |
963 ms |
22716 KB |
Output is correct |
35 |
Correct |
324 ms |
22688 KB |
Output is correct |
36 |
Correct |
112 ms |
18748 KB |
Output is correct |
37 |
Correct |
1717 ms |
26184 KB |
Output is correct |
38 |
Correct |
1675 ms |
25512 KB |
Output is correct |
39 |
Correct |
1213 ms |
26192 KB |
Output is correct |
40 |
Correct |
242 ms |
22564 KB |
Output is correct |
41 |
Correct |
936 ms |
22552 KB |
Output is correct |
42 |
Correct |
78 ms |
18168 KB |
Output is correct |
43 |
Execution timed out |
3069 ms |
32908 KB |
Time limit exceeded |
44 |
Halted |
0 ms |
0 KB |
- |