답안 #933069

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
933069 2024-02-25T00:51:22 Z vjudge1 Regions (IOI09_regions) C++17
30 / 100
8000 ms 131072 KB
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define deb(x) ;
using lli=long long int;
 
 
#ifndef LOCAL
//    #define endl '\n'
#endif
 
vector<lli> ch;
lli aux=0;
vector<vector<lli>> sons;
vector<pair<lli,lli>> ranges;
void dfs(lli n){
  ch[n]=aux;
  lli ini=aux;
  aux++;
  for(lli x: sons[n]){
    dfs(x);
  }
  ranges[n]={ini, aux-1};
}
 vector<vector<lli>> ans;
 vector<lli> regions;
void solvefirstcase(lli n, vector<lli> &act){
  for(lli i=0; i<act.size(); ++i){
    ans[i][regions[n]]+=act[i];
  }
  act[regions[n]]++;
  for(lli x: sons[n]){
    solvefirstcase(x,act );
  }
  act[regions[n]]--;
}

struct segtree{
  segtree *left, *right;
  multiset<lli> values;
  lli l,r;
  segtree(lli a, lli b): l(a), r(b){
    lli m=(l+r)/2;
    if(l!=r){
      left=new segtree(l, m);
      right=new segtree(m+1, r);
    }
  }
  void insert(lli a, lli b, lli v){
    if(a<=l && r<=b){
      values.insert(v);
      return;
    }
    if(r<=a || b<=l){
      return;
    }
    left->insert(a,b,v);
    right->insert(a,b,v);
  }
  lli query(lli x, lli v){
    lli ans=values.count(v);
    if(l==r){
      return ans;
    }
    lli m=(l+r)/2;
    if(x<=m){
      ans+=left->query(x,v);
    }
    else{
      ans+=right->query(x,v);
    }
    return ans;
  }
};


void solve(){
    lli n,r,k;
    cin>>n>>r>>k;
    regions.resize(n);
    cin>>regions[0];
    regions[0]--;
    sons.resize(n);
    vector<vector<lli>> members(r);
    members[regions[0]].pb(0);
    for(lli i=1; i<n; ++i){
      deb(i);
      lli s;
      cin>>s>>regions[i];
      s--;
      regions[i]--;
      deb("hi");
      members[regions[i]].pb(i);
      deb("Hi2");
      sons[s].pb(i);
      deb("HI3");
    }
    ch.resize(n);
    ranges.resize(n);
    deb("hi");
    dfs(0);
    deb("hi");
    if(r<=500){
      ans.resize(r, vector<lli> (r,0));
      vector<lli> act (r,0);
      solvefirstcase(0, act);
      for(lli i=0; i<k; ++i){
        lli a,b;
        cin>>a>>b;
        a--;
        b--;
        cout<<ans[a][b]<<endl;
      }
    }
    else{
      segtree tree(0, n);
      for(lli i=0; i<n; ++i){
        tree.insert(ranges[i].first, ranges[i].second, regions[i]);
      }
      for(lli i=0; i<k; ++i){
        lli a,b;
        cin>>a>>b;
        a--;
        b--;
        lli ans=0;
        for(lli x: members[b]){
          ans+=tree.query(ch[x], a);
        }
        cout<<ans<<endl;
      }
    }
}
 
 
int main(){
  ios::ios_base::sync_with_stdio(0);
  cin.tie(0);
  #ifdef LOCAL
    freopen("a.in", "r", stdin);
    freopen("a.out", "w", stdout);
  #endif
  lli t=1;
// cin>>t;
  while(t--){
    solve();
  }
}

Compilation message

regions.cpp: In function 'void solvefirstcase(lli, std::vector<long long int>&)':
regions.cpp:28:17: warning: comparison of integer expressions of different signedness: 'lli' {aka 'long long int'} and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for(lli i=0; i<act.size(); ++i){
      |                ~^~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 0 ms 344 KB Output is correct
3 Correct 2 ms 344 KB Output is correct
4 Correct 2 ms 344 KB Output is correct
5 Correct 3 ms 344 KB Output is correct
6 Correct 7 ms 1080 KB Output is correct
7 Correct 13 ms 792 KB Output is correct
8 Correct 15 ms 984 KB Output is correct
9 Correct 22 ms 1896 KB Output is correct
10 Correct 53 ms 2812 KB Output is correct
11 Correct 53 ms 2392 KB Output is correct
12 Correct 66 ms 4260 KB Output is correct
13 Correct 77 ms 3464 KB Output is correct
14 Correct 86 ms 3672 KB Output is correct
15 Correct 133 ms 6752 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 413 ms 8560 KB Output is correct
2 Correct 465 ms 7848 KB Output is correct
3 Correct 758 ms 11232 KB Output is correct
4 Incorrect 1004 ms 14044 KB Output isn't correct
5 Incorrect 1756 ms 30848 KB Output isn't correct
6 Execution timed out 8007 ms 27072 KB Time limit exceeded
7 Execution timed out 8064 ms 35156 KB Time limit exceeded
8 Execution timed out 8021 ms 92944 KB Time limit exceeded
9 Execution timed out 8013 ms 95780 KB Time limit exceeded
10 Runtime error 321 ms 131072 KB Execution killed with signal 9
11 Execution timed out 8041 ms 76764 KB Time limit exceeded
12 Execution timed out 8039 ms 100172 KB Time limit exceeded
13 Execution timed out 8068 ms 111828 KB Time limit exceeded
14 Execution timed out 8047 ms 98488 KB Time limit exceeded
15 Runtime error 306 ms 131072 KB Execution killed with signal 9
16 Runtime error 311 ms 131072 KB Execution killed with signal 9
17 Runtime error 290 ms 131072 KB Execution killed with signal 9