Submission #157056

# Submission time Handle Problem Language Result Execution time Memory
157056 2019-10-09T10:43:02 Z dandrozavr Birthday gift (IZhO18_treearray) C++14
0 / 100
9 ms 7548 KB
/*
Uruchamiamy samolot zwiadowczy ( + 500% do wzlamaniej )

/▄/  /█/  /◐/   /▐/   /▌/ /▀/ /░/ /🔥/   choose  own style!

***IT'S OUR LONG WAY TO THE OIILLLL***

░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░▌░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░◐◐◐█████████▀▀▀▀▀▀🔥░░░░░░░░███░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░░░░▌░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░░░░█▌░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄▀██████████████████████████████████████████████████
░░░░░░░░░░░░░░░░░░░░░░░░░░▄▄▄████▄████████ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ █████
░░░░░░░░░░░░░░░░░░░░░░░░░░░▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█████████▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░◐◐◐█████████▀▀▀▀▀▀🔥░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████████░░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░███████░░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████░░░░░░░░░░░░░░░░
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░█████░░░░░░░░░░░░░░░
*/


//#pragma GCC optimize("Ofast")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4")
//#pragma comment(linker, "/stack:200000000")

#include <bits/stdc++.h>
using namespace std;



#define pb push_back
#define ll long long
#define ld long double
#define fi first
#define se second
#define eb emplace_back
#define pii pair < int , int >
#define pipii pair< int, pair < int , int > >
#define TIME clock() * 1.0 / CLOCKS_PER_SEC
mt19937 gen(chrono::high_resolution_clock::now().time_since_epoch().count());

//#include <ext/pb_ds/detail/standard_policies.hpp>'
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
//using namespace __gnu_pbds;template <typename T> using ordered_set = tree <T, null_type, less< T >, rb_tree_tag,tree_order_statistics_node_update>;
namespace fastio {template <class T> ostream &operator<<(ostream &os, const vector<T> &container){for (auto &u : container)os << u << " ";return os;}template<class T1, class T2> ostream& operator << (ostream& os, const pair<T1, T2>& p) { return os << p.first << " " << p.second; }template <class T> ostream &operator<<(ostream &os, set<T> const& con) { for (auto &u : con) os << u << " "; return os; }void pr() {}template <typename T, typename... args> void pr(T x, args... tail) { cout << x << " "; pr(tail...);}}using namespace fastio;

const int N = 3e5 + 5;
const int MA = 1e6 + 1;

const int X[4] = {0, 0, 1, -1};
const int Y[4] = {-1, 1, 0, 0};

vector < int > g[N];
int up[N][18], tin[N], tout[N], timer;

void dfs(int v, int pr = 0)
{
    tin[v] = ++timer;
    up[v][0] = pr;
    for (int i = 1; i< 18; ++i)
        up[v][i] = up[up[v][i - 1]][i - 1];
    for (int to : g[v])
    if (to != pr)
    {
        dfs(to, v);
    }
    tout[v] = ++timer;
}

bool upper(int x, int y)
{
    return (tin[x] <= tin[y] && tout[x] >= tout[y]);
}

int LCA(int x, int y)
{
    if (upper(x, y))
        return x;
    if (upper(y, x))
        return y;

    for (int i = 17; i >= 0; --i)
        if (!upper(up[x][i], y))
          x = up[x][i];
    return up[x][0];
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
    #ifdef Estb_probitie
        freopen("input.txt","r",stdin);
        freopen("output.txt","w",stdout);
    #endif

    int n, m, q;
    cin >> n >> m >> q;

    for (int i = 1; i < n; ++i)
    {
        int x, y;
        cin >> x >> y;
        --x, --y;
        g[x].pb(y);
        g[y].pb(x);
    }

    dfs(0);
    int a[m];

    for (int i = 0; i < m; ++i)
        cin >> a[i], a[i]--;

    set < int > ver[n], pai[n];
    for (int i = 0; i < m; ++i)
    {
        ver[a[i]].insert(i);
        if (i)
            pai[LCA(a[i], a[i - 1])].insert(i - 1);
    }


    while(q--)
    {
        int ty;
        cin >> ty;
        if (ty == 1)
        {
            int pos, v;
            cin >> pos >> v;
            --pos;--v;
            ver[a[pos]].erase(pos);
            if (pos)
                pai[LCA(a[pos], a[pos - 1])].erase(pos - 1);
            if (pos + 1 < m)
                pai[LCA(a[pos], a[pos + 1])].erase(pos);

            a[pos] = v;
            ver[v].insert(pos);
            if (pos)
                pai[LCA(v, a[pos - 1])].insert(pos - 1);
            if (pos + 1 < m)
                pai[LCA(v, a[pos + 1])].insert(pos + 1);
            continue;
        }
        int l, r, v;
        cin >> l >> r >> v;
        --l;--r;--v;
        int f = -2, s = -2;
        auto pp = ver[v].lower_bound(l);
        if (pp != ver[v].end() && (*pp) <= r)
        {
            f = s = (*pp);
        } else
        {
            auto poz = pai[v].lower_bound(l);
            if (poz != pai[v].end() && (*poz) < r)
                f = (*poz), s = (*poz) + 1;
        }
        cout << f + 1 << " " << s + 1 << '\n';
    }
}
# Verdict Execution time Memory Grader output
1 Correct 9 ms 7548 KB n=5
2 Correct 9 ms 7416 KB n=100
3 Incorrect 8 ms 7416 KB Wrong range.
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 9 ms 7548 KB n=5
2 Correct 9 ms 7416 KB n=100
3 Incorrect 8 ms 7416 KB Wrong range.
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 9 ms 7548 KB n=5
2 Correct 9 ms 7416 KB n=100
3 Incorrect 8 ms 7416 KB Wrong range.
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 9 ms 7548 KB n=5
2 Correct 9 ms 7416 KB n=100
3 Incorrect 8 ms 7416 KB Wrong range.
4 Halted 0 ms 0 KB -