Submission #1337767

#TimeUsernameProblemLanguageResultExecution timeMemory
1337767hxanoExamination (JOI19_examination)C++20
0 / 100
3094 ms94504 KiB
#pragma GCC optimize("O3")
#include <bits/stdc++.h>
#define ll long long
#define ii pair<ll,ll>
#define fi first
#define se second
#define pb push_back
#define eb emplace_back
#define lwb lower_bound
#define upb upper_bound
#define ld double
#define ins insert
#define del erase
#define ull unsigned long long
using namespace std;
const ll big=1e5+9;
const ll sml=1e3+9;
const ll inf=1e18;
const ll mod=1e9+7;
const ld pi=3.1415926535109793L;
const ld eps=1e-12L;
struct tr{ll fi,se,th; tr(ll _fi=0, ll _se=0, ll _th=0){fi=_fi; se=_se; th=_th;}};
struct qu{ll fi,se,th,fo; qu(ll _fi=0, ll _se=0, ll _th=0, ll _fo=0){fi=_fi; se=_se; th=_th; fo=_fo;}};
ll mxz(ll &t, ll val){if (t<val){t=val; return 1;} return 0;}
ll mnz(ll &t, ll val){if (t>val){t=val; return 1;} return 0;}
ld mxz(ld &t, ld val){if (t<val){t=val; return 1;} return 0;}
ld mnz(ld &t, ld val){if (t>val){t=val; return 1;} return 0;}
ll qpw(ll n, ll k, ll m=mod){ll p=1, t=n%m; while (k){if (k&1) p=p*t%m; t=t*t%m; k>>=1;} return p;}
ll ran(){
	ll s=0;
	for (ll i=0; i<2; ++i) s^=(ll)rand()<<(i*14ll);
	return abs(s);
}
ll ran(ll l, ll r){
	return ran()%(r-l+1)+l;
}
ld ranl(ld l, ld r){
	return ran(l*1e6,r*1e6)*1e-6;
}
ll n,m,q,k;
struct custom_map {
	ll sz=0;
	vector<ii> val;
	ll init(ll _sz){
		sz=_sz*1.6+ran(0,1000);
		val.resize(sz,ii(-1,0));
		return 0;
	}
	ll upd(ll p){
		ll i=(p+big)*3ll%sz;
		while (val[i].fi!=-1){
			if (val[i].fi==p){
				++val[i].se;
				return 0;
			}
			++i;
			if (i==sz) i=0;
		}
		val[i].fi=p;
		val[i].se=1;
		return 0;
	}
	ll get(ll p){
		ll i=(p+big)*3ll%sz;
		while (val[i].fi!=-1){
			if (val[i].fi==p){
				return val[i].se;
			}
			++i;
			if (i==sz) i=0;
		}
		return 0;
	}
} fw_tri;
ll add(ll x, ll y){
	++x; ++y;
	for (; x; x-=x&-x){ll z=y; for (; z; z-=z&-z) fw_tri.upd(x*mod+z);}
	return 0;
}
ll get(ll x, ll y){
	ll s=0;
	++x; ++y;
	for (; x<mod; x+=x&-x){ll z=y; for (; z<mod; z+=z&-z) s+=fw_tri.get(x*mod+z);}
	return s;
}
vector<qu> que;
ll ans[big];
ll solve(){
	cin>>n>>q;
	for (ll i=1; i<=n; ++i){
		ll x,y; cin>>x>>y;
		que.emplace_back(x+y,0,x,y);
	}
	for (ll i=1; i<=q; ++i){
		ll x,y,z; cin>>x>>y>>z;
		que.emplace_back(z,i,x,y);
	}
	sort(que.begin(),que.end(),[](const qu &x, const qu &y){
		if (x.fi!=y.fi) return x.fi>y.fi;
		if (x.se!=y.se) return x.se<y.se;
		if (x.th!=y.th) return x.th<y.th;
		return x.fo<y.fo;
	});
	fw_tri.init(n*log2(n)*log2(n)/8);
	for (const qu &t: que){
		if (t.se==0){
			add(t.th,t.fo);
		} else {
			ans[t.se]=get(t.th,t.fo);
		}
	}
	for (ll i=1; i<=q; ++i){
		cout<<ans[i]<<"\n";
	}
	return 0;
}
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
//	freopen("INPUT.TXT","r",stdin);
//	freopen("OUTPUT.TXT","w",stdout);
	srand(time(0));
//	cout<<fixed<<setprecision(4);
	ll tst=1;
//	cin>>tst;
	for (; tst; --tst) solve();
	return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...