답안 #224545

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
224545 2020-04-18T11:21:57 Z dorijanlendvaj Examination (JOI19_examination) C++14
100 / 100
2474 ms 323572 KB
//DUEL
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#define x first
#define y second
#define pii pair<int,int>
#define pb push_back
#define eb emplace_back
#pragma GCC optimize("unroll-loops")
#define shandom_ruffle(a, b) shuffle(a, b, rng)
#define vi vector<int>
#define vl vector<ll>
#define popcnt __builtin_popcount
#define popcntll __builtin_popcountll
#define all(a) begin(a),end(a)

using namespace std;
using namespace __gnu_pbds;

using ll=long long;
using ull=unsigned long long;
using ld=long double;
int MOD=1000000007;
int MOD2=998244353;
vector<int> bases;
const ll LLINF=1ll<<60;
const char en='\n';

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
void yes() {cout<<"YES"<<en; exit(0);}
void no() {cout<<"NO"<<en; exit(0);}
inline int rund() {int x576363482791fuweh=rng();return abs(x576363482791fuweh)%RAND_MAX;}
template<class T>
void prVec(vector<T> w,bool fl=false)
{
	cout<<w.size()<<en;
	for (int i=0;i<int(w.size())-1;++i) cout<<w[i]<<' ';
	if (w.size()) cout<<w[w.size()-1]<<en;
	if (fl) cout<<flush;
}

void M998()
{
	swap(MOD,MOD2);
}

ll raand()
{
	ll a=rund();
	a*=RAND_MAX;
	a+=rund();
    return a;
}

#define rand raand

ll raaand()
{
	return raand()*(MOD-7)+raand();
}

string to_upper(string a)
{
	for (int i=0;i<(int)a.size();++i) if (a[i]>='a' && a[i]<='z') a[i]-='a'-'A';
	return a;
}

string to_lower(string a)
{
	for (int i=0;i<(int)a.size();++i) if (a[i]>='A' && a[i]<='Z') a[i]+='a'-'A';
	return a;
}

ll sti(string a,int base=10)
{
	ll k=0;
	for (int i=0;i<(int)a.size();++i)
	{
		k*=base;
		k+=a[i]-'0';
	}
	return k;
}

template<class T>
void eras(vector<T>& a,T b)
{
	a.erase(find(a.begin(),a.end(),b));
}

string its(ll k,int base=10)
{
	if (k==0) return "0";
	string a;
	while (k)
	{
		a.push_back((k%base)+'0');
		k/=base;
	}
	reverse(a.begin(),a.end());
	return a;
}

ll min(ll a,int b)
{
	if (a<b) return a;
	return b;
}

ll min(int a,ll b)
{
	if (a<b) return a;
	return b;
}

ll max(ll a,int b)
{
	if (a>b) return a;
	return b;
}

ll max(int a,ll b)
{
	if (a>b) return a;
	return b;
}

ll gcd(ll a,ll b)
{
	if (b==0) return a;
	return gcd(b,a%b);
}

ll lcm(ll a,ll b)
{
	return a/gcd(a,b)*b;
}

template<class T,class K>
pair<T,K> mp(T a,K b)
{
	return make_pair(a,b);
}

inline int mult(ll a,ll b)
{
	return (a*b)%MOD;
}

inline int pot(int n,int k)
{
	if (k==0) return 1;
	ll a=pot(n,k/2);
	a=mult(a,a);
	if (k%2) return mult(a,n);
	else return a;
}

int divide(int a,int b)
{
	return mult(a,pot(b,MOD-2));
}

inline int sub(int a,int b)
{
	if (a-b>=0) return a-b;
	return a-b+MOD;
}

inline int add(int a,int b)
{
	if (a+b>=MOD) return a+b-MOD;
	return a+b;
}

bool prime(ll a)
{
	if (a==1) return 0;
	for (int i=2;i<=round(sqrt(a));++i)
	{
		if (a%i==0) return 0;
	}
	return 1;
}

const int N=100010,M=1<<17,NO=6e7;
int n,q,ans[N];
vi a,b,c;
pii v[N];
vector<pair<int,pii>> qu[N];
int le[NO],ri[NO],seg[NO],cu=M*2;

bool cmp(pii a,pii b)
{
	return a.x+a.y<b.x+b.y;
}

int _l(int a)
{
	if (le[a]) return le[a];
	return le[a]=cu++;
}

int _r(int a)
{
	if (ri[a]) return ri[a];
	return ri[a]=cu++;
}

void upd1(int i,int l,int r,int lo=0,int hi=M)
{
	//cout<<"preup"<<i<<' '<<l<<' '<<r<<' '<<lo<<' '<<hi<<' '<<seg[i]<<en;
	if (lo>=l && hi<=r)
	{
		++seg[i];
		return;
	}
	int mid=(lo+hi)/2,res=0;
	if (mid>l) upd1(_l(i),l,r,lo,mid);
	if (mid<r) upd1(_r(i),l,r,mid,hi);
	if (le[i]) res+=seg[_l(i)];
	if (ri[i]) res+=seg[_r(i)];
	seg[i]=res;
	//cout<<"aftup"<<i<<' '<<l<<' '<<r<<' '<<lo<<' '<<hi<<' '<<seg[i]<<en;
}

void upd2(int l,int r,int l1,int r1,int lo=0,int hi=M,int i=1)
{
	if (lo>=r || hi<=l) return;
	upd1(i,l1,r1);
	if (lo>=l && hi<=r) return;
	int mid=(lo+hi)/2;
	upd2(l,r,l1,r1,lo,mid,i*2);
	upd2(l,r,l1,r1,mid,hi,i*2+1);
}

void ins(int x,int y)
{
	upd2(x,x+1,y,y+1);
}

int ge1(int i,int l,int r,int lo=0,int hi=M)
{
	//cout<<"query"<<i<<' '<<l<<' '<<r<<' '<<lo<<' '<<hi<<' '<<seg[i]<<en;
	if (lo>=l && hi<=r) return seg[i];
	int mid=(lo+hi)/2,res=0;
	if (mid>l) res+=ge1(_l(i),l,r,lo,mid);
	if (mid<r) res+=ge1(_r(i),l,r,mid,hi);
	return res;
}

int ge2(int l,int r,int l1,int r1,int lo=0,int hi=M,int i=1)
{
	if (lo>=l && hi<=r) return ge1(i,l1,r1);
	if (lo>=r || hi<=l) return 0;
	int mid=(lo+hi)/2;
	return ge2(l,r,l1,r1,lo,mid,i*2)+ge2(l,r,l1,r1,mid,hi,i*2+1);
}

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	for (int i=0;i<10;++i) bases.push_back(rand()%(MOD-13893829*2)+13893829);
	cin>>n>>q;
	for (int i=0;i<n;++i)
	{
		cin>>v[i].x>>v[i].y;
		a.pb(v[i].x);
		b.pb(v[i].y);
		c.pb(v[i].x+v[i].y);
	}
	sort(all(a));
	sort(all(b));
	sort(all(c));
	sort(v,v+n,cmp);
	for (int i=0;i<n;++i)
	{
		v[i].x=lower_bound(all(a),v[i].x)-a.begin();
		v[i].y=lower_bound(all(b),v[i].y)-b.begin();
		//cout<<v[i].x<<' '<<v[i].y<<en;
	}
	for (int i=0;i<q;++i)
	{
		int x,y,z;
		cin>>x>>y>>z;
		x=lower_bound(all(a),x)-a.begin();
		y=lower_bound(all(b),y)-b.begin();
		z=lower_bound(all(c),z)-c.begin();
		//cout<<x<<' '<<y<<' '<<z<<en;
		qu[z].pb({i,{x,y}});
	}
	for (int i=n;i>=0;--i)
	{
		if (i!=n) ins(v[i].x,v[i].y);
		for (auto a: qu[i])
		{
			ans[a.x]=ge2(a.y.x,n,a.y.y,n);
		}
	}
	for (int i=0;i<q;++i) cout<<ans[i]<<en;
}





# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2816 KB Output is correct
2 Correct 6 ms 2816 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2816 KB Output is correct
5 Correct 6 ms 2816 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 32 ms 8568 KB Output is correct
8 Correct 32 ms 8576 KB Output is correct
9 Correct 32 ms 8696 KB Output is correct
10 Correct 26 ms 6272 KB Output is correct
11 Correct 29 ms 6392 KB Output is correct
12 Correct 21 ms 3328 KB Output is correct
13 Correct 42 ms 8056 KB Output is correct
14 Correct 31 ms 8064 KB Output is correct
15 Correct 31 ms 8056 KB Output is correct
16 Correct 18 ms 4480 KB Output is correct
17 Correct 22 ms 4608 KB Output is correct
18 Correct 14 ms 3068 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2232 ms 280952 KB Output is correct
2 Correct 2193 ms 281192 KB Output is correct
3 Correct 2208 ms 281124 KB Output is correct
4 Correct 969 ms 127964 KB Output is correct
5 Correct 940 ms 123100 KB Output is correct
6 Correct 512 ms 9436 KB Output is correct
7 Correct 2233 ms 260176 KB Output is correct
8 Correct 2111 ms 263644 KB Output is correct
9 Correct 1920 ms 237484 KB Output is correct
10 Correct 444 ms 45732 KB Output is correct
11 Correct 481 ms 40028 KB Output is correct
12 Correct 305 ms 7892 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2232 ms 280952 KB Output is correct
2 Correct 2193 ms 281192 KB Output is correct
3 Correct 2208 ms 281124 KB Output is correct
4 Correct 969 ms 127964 KB Output is correct
5 Correct 940 ms 123100 KB Output is correct
6 Correct 512 ms 9436 KB Output is correct
7 Correct 2233 ms 260176 KB Output is correct
8 Correct 2111 ms 263644 KB Output is correct
9 Correct 1920 ms 237484 KB Output is correct
10 Correct 444 ms 45732 KB Output is correct
11 Correct 481 ms 40028 KB Output is correct
12 Correct 305 ms 7892 KB Output is correct
13 Correct 2331 ms 317908 KB Output is correct
14 Correct 2438 ms 315836 KB Output is correct
15 Correct 2210 ms 281144 KB Output is correct
16 Correct 1022 ms 142820 KB Output is correct
17 Correct 967 ms 132516 KB Output is correct
18 Correct 510 ms 9912 KB Output is correct
19 Correct 2315 ms 317876 KB Output is correct
20 Correct 2439 ms 317516 KB Output is correct
21 Correct 2116 ms 300132 KB Output is correct
22 Correct 472 ms 45788 KB Output is correct
23 Correct 497 ms 39900 KB Output is correct
24 Correct 275 ms 8044 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 2816 KB Output is correct
2 Correct 6 ms 2816 KB Output is correct
3 Correct 6 ms 2816 KB Output is correct
4 Correct 6 ms 2816 KB Output is correct
5 Correct 6 ms 2816 KB Output is correct
6 Correct 6 ms 2816 KB Output is correct
7 Correct 32 ms 8568 KB Output is correct
8 Correct 32 ms 8576 KB Output is correct
9 Correct 32 ms 8696 KB Output is correct
10 Correct 26 ms 6272 KB Output is correct
11 Correct 29 ms 6392 KB Output is correct
12 Correct 21 ms 3328 KB Output is correct
13 Correct 42 ms 8056 KB Output is correct
14 Correct 31 ms 8064 KB Output is correct
15 Correct 31 ms 8056 KB Output is correct
16 Correct 18 ms 4480 KB Output is correct
17 Correct 22 ms 4608 KB Output is correct
18 Correct 14 ms 3068 KB Output is correct
19 Correct 2232 ms 280952 KB Output is correct
20 Correct 2193 ms 281192 KB Output is correct
21 Correct 2208 ms 281124 KB Output is correct
22 Correct 969 ms 127964 KB Output is correct
23 Correct 940 ms 123100 KB Output is correct
24 Correct 512 ms 9436 KB Output is correct
25 Correct 2233 ms 260176 KB Output is correct
26 Correct 2111 ms 263644 KB Output is correct
27 Correct 1920 ms 237484 KB Output is correct
28 Correct 444 ms 45732 KB Output is correct
29 Correct 481 ms 40028 KB Output is correct
30 Correct 305 ms 7892 KB Output is correct
31 Correct 2331 ms 317908 KB Output is correct
32 Correct 2438 ms 315836 KB Output is correct
33 Correct 2210 ms 281144 KB Output is correct
34 Correct 1022 ms 142820 KB Output is correct
35 Correct 967 ms 132516 KB Output is correct
36 Correct 510 ms 9912 KB Output is correct
37 Correct 2315 ms 317876 KB Output is correct
38 Correct 2439 ms 317516 KB Output is correct
39 Correct 2116 ms 300132 KB Output is correct
40 Correct 472 ms 45788 KB Output is correct
41 Correct 497 ms 39900 KB Output is correct
42 Correct 275 ms 8044 KB Output is correct
43 Correct 2368 ms 323332 KB Output is correct
44 Correct 2362 ms 323572 KB Output is correct
45 Correct 2474 ms 320996 KB Output is correct
46 Correct 1037 ms 146116 KB Output is correct
47 Correct 1008 ms 138168 KB Output is correct
48 Correct 518 ms 9056 KB Output is correct
49 Correct 2289 ms 291420 KB Output is correct
50 Correct 2003 ms 298084 KB Output is correct
51 Correct 1924 ms 257800 KB Output is correct
52 Correct 538 ms 58468 KB Output is correct
53 Correct 514 ms 46548 KB Output is correct