Submission #758491

# Submission time Handle Problem Language Result Execution time Memory
758491 2023-06-14T16:38:40 Z shadow_sami Regions (IOI09_regions) C++17
100 / 100
5712 ms 73796 KB
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
typedef long long int ll;
typedef vector<ll> vi;
typedef vector<vector<ll>> vvi;
typedef pair<ll,ll> pi;
typedef map<ll,ll> mi;
typedef long double ld;
typedef vector<ld> vd;
typedef vector<vector<ld>> vvd;
typedef pair<ld,ld> pd;
#define ff first
#define ss second
#define srt(a) sort(a.begin(),a.end());
#define fip(k, n) for (ll i = k; i < n; i++)
#define fjp(k, n) for (ll j = k; j < n; j++)
#define fin(k, n) for (ll i = k; i >= n; i--)
#define fjn(k, n) for (ll j = k; j >= n; j--)
#define fp(k, n, m) for (ll k = n; k < m; k++)
#define fn(k, n, m) for (ll k = n; k >= m; k--)
#define ordered_set tree<pi, null_type,less< pi >, rb_tree_tag,tree_order_statistics_node_update>
#define totalOne(n) __builtin_popcount(n)
#define backZero(n) __builtin_ctzll(n)
#define frontZero(n) __builtin_clzll(n)
#define fx(k) for ( auto x : k )
#define test ll t;cin >> t;while (t--)
#define nli "\n"

// ==========================(debug)============================================================================================== //

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _printn(x); cerr << nli;
#else
#define debug(x)
#endif

void _printn(ll x){ cerr<<x<<" "; }
void _printn(int x){ cerr<<x<<" "; }
void _printn(ld x){ cerr<<x<<" "; }
void _printn(double x){ cerr<<x<<" "; }
void _printn(string x){ cerr<<x<<" "; }
void _printn(char x){ cerr<<x<<" "; }
void _printn(bool x){ cerr<<x<<" "; }
template<class T,class V>void _printn(pair<T,V> vv);
template<class T> void _printn(vector<T> vv);
template<class T> void _printn(set<T> vv);
template<class T,class V> void _printn(map<T,V> vv);
template<class T> void _printn(multiset<T> vv);
template<class T,class V>void _printn(pair<T,V> vv){ cerr<<"( ";_printn(vv.ff);cerr<<",";_printn(vv.ss);cerr<<")";}
template<class T> void _printn(vector<T> vv){ cerr<<"[ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"]"; };
template<class T> void _printn(set<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T> void _printn(multiset<T> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };
template<class T,class V> void _printn(map<T,V> vv){ cerr<<"{ "; for(auto xx:vv){ _printn(xx);cerr<<" "; } cerr<<"}"; };

// ==========================(debug)============================================================================================== //

ll n,m,tp,tp2,res,cnt,sum,tptp,ans;
const ll mx = 2e5+5;
const ll mod = 1e9+7;

// ==========================(MOD)=============================================================================================== //

ll mod_add(ll aa,ll bb){ return ((aa%mod)+(bb%mod))%mod; }
ll mod_minus(ll aa,ll bb){ return (((aa%mod)-(bb%mod))+10*mod)%mod; }
ll mod_mul(ll aa,ll bb){ return ((aa%mod)*(bb%mod))%mod; }
ll mod_power(ll aa,ll bb){ aa%=mod; ll empowered = 1; bb%=mod-1; while(bb > 0){ if(bb & 1) empowered = mod_mul(empowered,aa); bb = bb >> 1; aa = mod_mul(aa,aa); } return empowered; }
ll mod_divi(ll aa,ll bb){ aa=mod_mul(aa,mod_power(bb,mod-2)); return aa; }

// ==========================(MOD)=============================================================================================== //

const ll blk = 460;
bool f = false;
ll q;
ll a[mx];
vi adj[mx];
ll tre[mx];
ll st[mx];
ll en[mx];
ll pref[mx];
unordered_map<ll,ll> mp[mx];
vi lis[mx];
bool vis[mx];
ll timer = 0;

void dfs(ll u,ll par){
	st[u] = timer;
	tre[timer] = u;
	timer++;
	fx(adj[u])
		if(x != par)
			dfs(x,u);
	en[u] = timer-1;
	return;
}
int sr,de;

int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    // #ifndef ONLINE_JUDGE
    //     freopen("input1.txt", "r", stdin);
    //     freopen("output1.txt", "w", stdout);
    //     freopen("error1.txt", "w", stderr);
    // #endif // ONLINE_JUDGE

        cin>>n>>m>>q;
        cin>>a[1];
        fip(2,n+1){
        	cin>>sr;
        	cin>>a[i];
        	adj[i].push_back(sr);
        	adj[sr].push_back(i);
        }
        dfs(1,-1);
        fip(1,n+1)	
        	lis[a[i]].push_back(st[i]);
        memset(vis,0,sizeof(vis));
        fip(1,n+1){
        	if(vis[a[i]])
        		continue;
        	sort(lis[a[i]].begin(),lis[a[i]].end());
        	vis[a[i]]=1;
        	if(lis[a[i]].size() < blk)
        		continue;
        	fjp(0,n+2)
        		pref[j] = 0;
        	// debug(lis[a[i]]);
        	fx(lis[a[i]]){
        		pref[st[tre[x]]]++;
        		pref[en[tre[x]]+1]--;
        	}
        	fjp(0,n){
        		if(j!=0)
        			pref[j] += pref[j-1];
        		mp[a[tre[j]]][a[i]] += pref[j];
        	}
        }

        while(q--){
        	cin>>sr>>de;
        	ans = 0;
        	if(lis[sr].size() < blk){
        		fx(lis[sr]){
        			tp = lower_bound(lis[de].begin(),lis[de].end(),st[tre[x]])-lis[de].begin();
        			tp2 = lower_bound(lis[de].begin(),lis[de].end(),en[tre[x]]+1)-lis[de].begin();
        			ans += max(0ll,tp2-tp);
        		}
        	}else{
        		ans = mp[de][sr];
        	}
        	cout<<ans<<nli;
        	cout.flush();
        }

    // cerr << "Time elapsed: " << setprecision(6) << 1000.0 * clock() / CLOCKS_PER_SEC << "ms\n";
    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 12 ms 20816 KB Output is correct
2 Correct 13 ms 20816 KB Output is correct
3 Correct 13 ms 20816 KB Output is correct
4 Correct 16 ms 20880 KB Output is correct
5 Correct 26 ms 20880 KB Output is correct
6 Correct 25 ms 20944 KB Output is correct
7 Correct 25 ms 20944 KB Output is correct
8 Correct 26 ms 20944 KB Output is correct
9 Correct 55 ms 21504 KB Output is correct
10 Correct 98 ms 21656 KB Output is correct
11 Correct 145 ms 21996 KB Output is correct
12 Correct 188 ms 22608 KB Output is correct
13 Correct 240 ms 22844 KB Output is correct
14 Correct 306 ms 23300 KB Output is correct
15 Correct 406 ms 25844 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2076 ms 27832 KB Output is correct
2 Correct 2471 ms 27928 KB Output is correct
3 Correct 3610 ms 29864 KB Output is correct
4 Correct 326 ms 23400 KB Output is correct
5 Correct 437 ms 24760 KB Output is correct
6 Correct 962 ms 43248 KB Output is correct
7 Correct 2233 ms 31548 KB Output is correct
8 Correct 2162 ms 73796 KB Output is correct
9 Correct 3755 ms 33528 KB Output is correct
10 Correct 5712 ms 72872 KB Output is correct
11 Correct 4811 ms 37384 KB Output is correct
12 Correct 1585 ms 38936 KB Output is correct
13 Correct 1982 ms 39904 KB Output is correct
14 Correct 2622 ms 54196 KB Output is correct
15 Correct 3726 ms 44832 KB Output is correct
16 Correct 3536 ms 50232 KB Output is correct
17 Correct 3908 ms 61896 KB Output is correct