답안 #476998

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
476998 2021-09-29T17:22:15 Z urosk Regions (IOI09_regions) C++14
30 / 100
3378 ms 131076 KB
// __builtin_popcount(x) broj bitova
// __builtin_popcountll(x) long long
#define here cerr<<"---------------------------\n"
#include "bits/stdc++.h"
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#define ld double
#define ll long long
#define ull unsigned long long
#define llinf 100000000000000000LL // 10^17
#define iinf 2000000000 // 2*10^9
#define pb push_back
#define popb pop_back
#define fi first
#define sc second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pld pair<ld,ld>
#define sz(a) int(a.size())
#define all(a) a.begin(),a.end()
#define rall(a) a.begin(),a.end(),greater<int>()
#define getunique(v) {sort(all(v)); v.erase(unique(all(v)), v.end());}

using namespace std;
using namespace __gnu_pbds;

typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set;

void setIO(string inoutname)
{
	freopen((inoutname+".in").c_str(),"r",stdin);
    	freopen((inoutname+".out").c_str(),"w",stdout);
}
#define mod 1
ll gcd(ll a, ll b)
{
   if(b==0) return a;
   if(a==0) return b;
   if(a>=b)  return gcd(a%b,b);
   return  gcd(a,b%a);
}
ll lcm(ll a,ll b){
   return (a/gcd(a,b))*b;
}
ll add(ll a,ll b){
	a+=b;
	a+=mod;
	if(a>=mod) a%=mod;
	return a;
}
ll mul(ll a,ll b){return(a*b)%mod;}
#define maxn 200005
ll n,r,q;
ll a[maxn];
ll b[maxn];
ll in[maxn],out[maxn];
ll cnt[maxn];
vector<ll> g[maxn];
ll ti = 1;
void dfs(ll u){
    in[u] = ti;
    b[ti] = a[u];
    ti++;
    for(ll v : g[u]){
        dfs(v);
    }
    out[u] = ti-1;
}
bool in_t(ll v,ll u){
    return in[u]<=in[v]&&out[u]>=out[v];
}
bool cmp(ll x,ll y){return in[x]<in[y];}
map<pll,ll> pre;
vector<ll> w[maxn];
vector<pll> f;
ll bsr(ll x,ll i){
    ll l = 0,r = sz(w[x])-1,mid,rez = -1;
    while(l<=r){
        mid = (l+r)/2;
        if(i>=in[w[x][mid]]){
            rez = mid;
            l = mid+1;
        }else r = mid-1;
    }
    return rez;
}
ll bsl(ll x,ll i){
    ll l = 0,r = sz(w[x])-1,mid,rez = -1;
    while(l<=r){
        mid = (l+r)/2;
        if(i<=in[w[x][mid]]){
            rez = mid;
            r = mid-1;
        }else l = mid+1;;
    }
    return rez;
}
void tc(){
	ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0);
    cin >> n >> r >> q;
    cin >> a[1];
    w[a[1]].pb(1);
    for(ll i = 2;i<=n;i++){
        ll x;
        cin >> x >> a[i];
        w[a[i]].pb(i);
        g[x].pb(i);
    }
    dfs(1);
    for(ll i = 1;i<=r;i++){
        sort(all(w[i]),cmp);
    }
    ll siz = 1;
    for(ll i = 1;i*i<=n;i++) i;
    for(ll i = 1;i<=r;i++){
        if(sz(w[i])<siz) continue;
        fill(cnt,cnt+n+2,0);
        for(ll j : w[i]){
            cnt[in[j]]++;
            cnt[out[j]+1]--;
        }
        for(ll j = 1;j<ti;j++){
            cnt[j]+=cnt[j-1];
            pre[{i,b[j]}]+=cnt[j];
        }
    }
    /*here;
    for(ll j = 1;j<=r;j++){
            for(ll i : wt[j]) cerr<<i<< " ";
            cerr<<endl;
    }
    here;*/
    while(q--){
        ll r1,r2;
        cin >> r1 >> r2;
        if(sz(w[r1])>=siz||pre.count({r1,r2})) cout<<pre[{r1,r2}]<<endl;
        else{
            ll ans = 0;
            //cerr<<"R2: "<<r2<<endl;
            for(ll i : w[r1]){
                ll l = in[i],r = out[i];
                ll br = bsr(r2,r);
                ll bl = bsl(r2,l);
                //cerr<<"AAA"<<endl;
                //cerr<<l<< " "<<r<<endl;
                //cerr<<bl<< " "<<br<<endl;
                if(bl==-1) continue;
                if(br==-1) continue;
                if(bl>br) continue;
                //cerr<<bl<< " "<<br<<" "<<br-bl<<endl;
                ans+=br-bl+1;
            }
            cout<<ans<<endl;
        }
    }
}
int main(){
	ios_base::sync_with_stdio(false);cerr.tie(0);cout.tie(0);cin.tie(0);
	//setIO("lol");
	int t; t = 1;
	while(t--){
		tc();
	}
	return 0;
}

Compilation message

regions.cpp: In function 'void tc()':
regions.cpp:114:30: warning: statement has no effect [-Wunused-value]
  114 |     for(ll i = 1;i*i<=n;i++) i;
      |                              ^
regions.cpp: In function 'void setIO(std::string)':
regions.cpp:31:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   31 |  freopen((inoutname+".in").c_str(),"r",stdin);
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
regions.cpp:32:13: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   32 |      freopen((inoutname+".out").c_str(),"w",stdout);
      |      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 6 ms 9672 KB Output is correct
2 Correct 5 ms 9672 KB Output is correct
3 Correct 8 ms 9672 KB Output is correct
4 Correct 8 ms 9800 KB Output is correct
5 Correct 19 ms 9888 KB Output is correct
6 Correct 44 ms 13376 KB Output is correct
7 Correct 49 ms 11208 KB Output is correct
8 Correct 86 ms 12388 KB Output is correct
9 Correct 201 ms 15856 KB Output is correct
10 Correct 500 ms 21644 KB Output is correct
11 Correct 470 ms 15432 KB Output is correct
12 Correct 961 ms 24236 KB Output is correct
13 Correct 960 ms 18600 KB Output is correct
14 Correct 630 ms 14596 KB Output is correct
15 Correct 1219 ms 17804 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1978 ms 18616 KB Output is correct
2 Correct 2213 ms 18480 KB Output is correct
3 Correct 3036 ms 22272 KB Output is correct
4 Runtime error 2739 ms 131076 KB Execution killed with signal 9
5 Runtime error 3342 ms 131076 KB Execution killed with signal 9
6 Runtime error 2184 ms 131076 KB Execution killed with signal 9
7 Runtime error 2142 ms 131076 KB Execution killed with signal 9
8 Runtime error 2594 ms 131076 KB Execution killed with signal 9
9 Runtime error 3139 ms 131076 KB Execution killed with signal 9
10 Runtime error 1940 ms 131076 KB Execution killed with signal 9
11 Runtime error 2813 ms 131076 KB Execution killed with signal 9
12 Runtime error 3378 ms 131076 KB Execution killed with signal 9
13 Runtime error 3356 ms 131076 KB Execution killed with signal 9
14 Runtime error 3030 ms 131076 KB Execution killed with signal 9
15 Runtime error 2199 ms 131076 KB Execution killed with signal 9
16 Runtime error 2201 ms 131076 KB Execution killed with signal 9
17 Runtime error 2873 ms 131076 KB Execution killed with signal 9