답안 #1094094

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1094094 2024-09-28T12:14:32 Z 0pt1mus23 Klasika (COCI20_klasika) C++14
33 / 110
739 ms 406772 KB
#include <bits/stdc++.h>
using namespace std;
#define needforspeed ios::sync_with_stdio(0);cin.tie(0);
#define int long long int
#define pb push_back
#define ins insert
#define endl '\n'
#define putr(x) cout<<x<<endl;return;
#define all(x) x.begin(),x.end()
#define _ << " " <<
const int mod = 1e9 +7,sze = 8e5 +23,inf = INT_MAX, L = 31; 
int T[sze][2];
set<int> fener[sze][2];
int tnod = 1;
int discover[sze];
int finish[sze];
vector<pair<int,int>> graph[sze];
 
void add(int node,int bit,int val,int gir){
    if(bit<0){
        return;
    }
    int x =0;
    if(val & (1<<bit)){
        x=1;
    }
    if(T[node][x]==0){
       T[node][x]= ( ++tnod);
    }
    // cout<<bit<<" added "<<val<<" "<<x<<endl;
    fener[node][x].ins(gir);
    add(T[node][x],bit-1,val,gir);
}
int timer =0;
int pref[sze];
void dfs(int node,int par,int px){
    discover[node]=++timer;
    pref[node]=px;
    for(auto v:graph[node]){
        if(v.first!=par){
            dfs(v.first,node,px ^ v.second);
        }
    }
    finish[node]=++timer;   
}
 
int qry(int node,int bit,int val,int l,int r){
    if(bit<0){
        return 0;
    }
    int lazim =1;
    if(val & (1<<bit)){
        lazim=0;
    }
    // cout<<bit<<" "<<val<<" "<<lazim<<" "<<T[node][lazim]<<endl;
    if(T[node][lazim] && fener[node][lazim].lower_bound(l) != fener[node][lazim].upper_bound(r)){
        return (1<<bit) + qry(T[node][lazim],bit-1,val,l,r);
    }
    else{
        return qry(T[node][1 - lazim],bit-1,val,l,r);
    }
}
void opt1z(){
    int q;
    cin>>q;
    int nodec =2;
    vector<pair<int, pair<int,int>>> queries;
    for(int i=0;i<q;i++){
        string op;cin>>op;
        int a,b;
        cin>>a>>b;
        if(op=="Add"){
            graph[a].pb({nodec,b});
            graph[nodec].pb({a,b});
            queries.pb({0,{nodec,b}});
            nodec++;
        }
        else{
            queries.pb({1,{a,b}});
        }
    }
    dfs(1,-1,0);
    add(1,L,0,discover[1]);
    // cout<<pref[2]<<endl;
    for(auto v:queries){
        auto [a,b] = v.second;
        if(v.first ==0){
            add(1,L,pref[a],discover[a]);
        }
        else{
            // cout<<"sa"<<endl;
            cout<<qry(1,L,pref[a],discover[b],finish[b])<<endl;
        }
    }
}
 
signed main() {
    needforspeed;
 
    int tt = 1;
    // cin>>tt;
    while(tt--){
        opt1z();
    }
 
    return 0;
}

Compilation message

klasika.cpp: In function 'void opt1z()':
klasika.cpp:86:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   86 |         auto [a,b] = v.second;
      |              ^
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 94312 KB Output is correct
2 Correct 39 ms 94548 KB Output is correct
3 Correct 39 ms 94536 KB Output is correct
4 Correct 40 ms 94556 KB Output is correct
5 Correct 39 ms 94296 KB Output is correct
6 Correct 39 ms 94552 KB Output is correct
7 Correct 39 ms 94548 KB Output is correct
8 Correct 39 ms 94704 KB Output is correct
9 Correct 39 ms 94300 KB Output is correct
10 Correct 38 ms 94552 KB Output is correct
11 Correct 38 ms 94556 KB Output is correct
12 Correct 44 ms 94544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 94312 KB Output is correct
2 Correct 39 ms 94548 KB Output is correct
3 Correct 39 ms 94536 KB Output is correct
4 Correct 40 ms 94556 KB Output is correct
5 Correct 39 ms 94296 KB Output is correct
6 Correct 39 ms 94552 KB Output is correct
7 Correct 39 ms 94548 KB Output is correct
8 Correct 39 ms 94704 KB Output is correct
9 Correct 39 ms 94300 KB Output is correct
10 Correct 38 ms 94552 KB Output is correct
11 Correct 38 ms 94556 KB Output is correct
12 Correct 44 ms 94544 KB Output is correct
13 Correct 41 ms 95320 KB Output is correct
14 Correct 45 ms 96092 KB Output is correct
15 Correct 43 ms 96856 KB Output is correct
16 Correct 44 ms 97364 KB Output is correct
17 Correct 47 ms 95056 KB Output is correct
18 Correct 50 ms 95824 KB Output is correct
19 Correct 49 ms 96592 KB Output is correct
20 Correct 50 ms 97364 KB Output is correct
21 Correct 45 ms 95060 KB Output is correct
22 Correct 47 ms 95812 KB Output is correct
23 Correct 48 ms 96592 KB Output is correct
24 Correct 50 ms 97364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 739 ms 177632 KB Output is correct
2 Runtime error 696 ms 406772 KB Execution killed with signal 11
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 94312 KB Output is correct
2 Correct 39 ms 94548 KB Output is correct
3 Correct 39 ms 94536 KB Output is correct
4 Correct 40 ms 94556 KB Output is correct
5 Correct 39 ms 94296 KB Output is correct
6 Correct 39 ms 94552 KB Output is correct
7 Correct 39 ms 94548 KB Output is correct
8 Correct 39 ms 94704 KB Output is correct
9 Correct 39 ms 94300 KB Output is correct
10 Correct 38 ms 94552 KB Output is correct
11 Correct 38 ms 94556 KB Output is correct
12 Correct 44 ms 94544 KB Output is correct
13 Correct 41 ms 95320 KB Output is correct
14 Correct 45 ms 96092 KB Output is correct
15 Correct 43 ms 96856 KB Output is correct
16 Correct 44 ms 97364 KB Output is correct
17 Correct 47 ms 95056 KB Output is correct
18 Correct 50 ms 95824 KB Output is correct
19 Correct 49 ms 96592 KB Output is correct
20 Correct 50 ms 97364 KB Output is correct
21 Correct 45 ms 95060 KB Output is correct
22 Correct 47 ms 95812 KB Output is correct
23 Correct 48 ms 96592 KB Output is correct
24 Correct 50 ms 97364 KB Output is correct
25 Correct 739 ms 177632 KB Output is correct
26 Runtime error 696 ms 406772 KB Execution killed with signal 11
27 Halted 0 ms 0 KB -