Submission #750680

# Submission time Handle Problem Language Result Execution time Memory
750680 2023-05-30T06:22:34 Z mars4 Regions (IOI09_regions) C++17
100 / 100
4207 ms 70444 KB
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 

using namespace std;
using namespace __gnu_pbds; 

#define ff              first
#define ss              second
#define ll              int
#define ld              long double
#define nl              cout<<"\n"
#define i128            __int128_t
#define all(v)          v.begin(),v.end()
#define mset(a,v)       memset((a),(v),sizeof(a))
#define forn(i,a,b)     for(int64_t i=int64_t(a);i<int64_t(b);++i)
#define forb(i,a,b)     for(int64_t i=int64_t(a);i>=int64_t(b);--i)
#define fastio()        ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);

#define mod         1'000'000'007
#define mod2        998'244'353 
#define inf         1'000'000'000'000'007
#define pi          3.14159265358979323846

template<class key,class cmp=std::less<key>>
using ordered_set=tree<key,null_type,cmp,rb_tree_tag,tree_order_statistics_node_update>;

template<class L,class R> ostream& operator<<(ostream& out,pair<L,R> &p)        {return out<<"("<<p.ff<<", "<<p.ss<<")";}
template<class T> ostream& operator<<(ostream& out,vector<T> &v)                {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,deque<T> &v)                 {out<<"[";for(auto it=v.begin();it!=v.end();++it){if(it!=v.begin())out<<", ";out<<*it;}return out<<"]";}
template<class T> ostream& operator<<(ostream& out,set<T> &s)                   {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class T> ostream& operator<<(ostream& out,ordered_set<T> &s)           {out<<"{";for(auto it=s.begin();it!=s.end();++it){if(it!=s.begin())out<<", ";out<<*it;}return out<<"}";}
template<class L,class R> ostream& operator<<(ostream& out,map<L,R> &m)         {out<<"{";for(auto it=m.begin();it!=m.end();++it){if(it!=m.begin())out<<", ";out<<*it;}return out<<"}";}

void dbg_out() {cerr<<"]\n";}
template<typename Head,typename... Tail> 
void dbg_out(Head H,Tail... T) {cerr<<H;if(sizeof...(Tail))cerr<<", ";dbg_out(T...);}
#ifdef LOCAL
#define dbg(...) cerr<<"["<<#__VA_ARGS__<<"] = [",dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif

//---------------------------------mars4---------------------------------

vector<vector<ll>> v;
vector<vector<ll>> g;
vector<vector<ll>> vst;
vector<ll> regions;
vector<ll> st;
vector<ll> ed;
vector<ll> dfs_cnt;
vector<ll> eregions;
vector<ll> ind;
const ll B=450;
ll timer=-1;

void dfs(ll cur)
{
	timer++;
	st[cur]=timer;
	vst[regions[cur]].push_back(st[cur]);
	for(ll r:eregions)
	{
		g[ind[r]][regions[cur]]+=dfs_cnt[r];
	}
	dfs_cnt[regions[cur]]++;
	for(ll nxt:v[cur])
	{
		dfs(nxt);
	}
	dfs_cnt[regions[cur]]--;
	ed[cur]=timer;
}

int main()
{
	/* fastio(); */
	ll z,n,m,t,k,i,j,l,d,h,r;
	ll q;
	ll root_region;
	cin>>n>>m>>q;
	ll sz=(n+B-1)/B;
	v=vector<vector<ll>>(n);
	vst=vector<vector<ll>>(m);
	g=vector<vector<ll>>(sz,vector<ll>(m));
	regions=vector<ll>(n);
	st=vector<ll>(n);
	ed=vector<ll>(n);
	dfs_cnt=vector<ll>(m);
	ind=vector<ll>(m);
	vector<ll> cnt(m);
	vector<vector<ll>> employee_region(m);
	cin>>root_region;
	root_region--;
	regions[0]=root_region;
	employee_region[root_region].push_back(0);
	forn(i,1,n)
	{
		cin>>l>>r;
		l--,r--;
		v[l].push_back(i);
		regions[i]=r;
		employee_region[r].push_back(i);
		cnt[r]++;
	}
	forn(i,0,m)
	{
		if(cnt[i]>=B)
		{
			ind[i]=(ll)eregions.size();
			eregions.push_back(i);
		}
	}
	dfs(0);
	while(q--)
	{
		cin>>l>>r;
		l--,r--;
		ll res=0;
		if(cnt[l]>=B)
		{
			res=g[ind[l]][r];
		}
		else
		{
			for(ll i:employee_region[l])
			{
				res+=upper_bound(all(vst[r]),ed[i])-lower_bound(all(vst[r]),st[i]);
			}
		}
		cout<<res<<endl;
	}
	cerr<<"\nTime elapsed: "<<1000*clock()/CLOCKS_PER_SEC<<"ms\n";
	return 0;
}

Compilation message

regions.cpp: In function 'int main()':
regions.cpp:79:5: warning: unused variable 'z' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |     ^
regions.cpp:79:11: warning: unused variable 't' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |           ^
regions.cpp:79:13: warning: unused variable 'k' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |             ^
regions.cpp:79:15: warning: unused variable 'i' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |               ^
regions.cpp:79:17: warning: unused variable 'j' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                 ^
regions.cpp:79:21: warning: unused variable 'd' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                     ^
regions.cpp:79:23: warning: unused variable 'h' [-Wunused-variable]
   79 |  ll z,n,m,t,k,i,j,l,d,h,r;
      |                       ^
# Verdict Execution time Memory Grader output
1 Correct 0 ms 208 KB Output is correct
2 Correct 1 ms 208 KB Output is correct
3 Correct 2 ms 208 KB Output is correct
4 Correct 4 ms 208 KB Output is correct
5 Correct 7 ms 344 KB Output is correct
6 Correct 19 ms 336 KB Output is correct
7 Correct 27 ms 336 KB Output is correct
8 Correct 37 ms 468 KB Output is correct
9 Correct 51 ms 976 KB Output is correct
10 Correct 84 ms 1144 KB Output is correct
11 Correct 133 ms 1608 KB Output is correct
12 Correct 121 ms 2216 KB Output is correct
13 Correct 206 ms 1988 KB Output is correct
14 Correct 298 ms 2688 KB Output is correct
15 Correct 288 ms 5508 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1746 ms 6856 KB Output is correct
2 Correct 1980 ms 5836 KB Output is correct
3 Correct 2928 ms 9084 KB Output is correct
4 Correct 317 ms 3980 KB Output is correct
5 Correct 285 ms 6392 KB Output is correct
6 Correct 664 ms 8036 KB Output is correct
7 Correct 1516 ms 12620 KB Output is correct
8 Correct 1012 ms 21064 KB Output is correct
9 Correct 2219 ms 33800 KB Output is correct
10 Correct 3625 ms 57168 KB Output is correct
11 Correct 4207 ms 59340 KB Output is correct
12 Correct 1149 ms 43000 KB Output is correct
13 Correct 1893 ms 43076 KB Output is correct
14 Correct 2214 ms 51752 KB Output is correct
15 Correct 3085 ms 65132 KB Output is correct
16 Correct 2555 ms 70444 KB Output is correct
17 Correct 2462 ms 60312 KB Output is correct