#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 = 100 * 1000 + 10;
int n, q;
int a[MX], b[MX], c[MX];
vi a2i[MX], b2i[MX];
int cl[MX];
int S = 300;
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;
set<int> sas, sbs;
forn(i, n) {
int x, y;
cin >> x >> y;
as.pb(x);
bs.pb(y);
cs.pb(x + y);
sas.insert(x);
sbs.insert(y);
}
forn(_, q) {
int l, r, cc;
cin >> l >> r >> cc;
l = *sas.lower_bound(l);
r = *sbs.lower_bound(r);
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(sz(a2i[l]) > S || ct > 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 |
Incorrect |
3 ms |
5708 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1847 ms |
23900 KB |
Output is correct |
2 |
Incorrect |
1906 ms |
23936 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1847 ms |
23900 KB |
Output is correct |
2 |
Incorrect |
1906 ms |
23936 KB |
Output isn't correct |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
3 ms |
5708 KB |
Output isn't correct |
2 |
Halted |
0 ms |
0 KB |
- |