답안 #466867

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
466867 2021-08-20T21:37:20 Z TlenekWodoru Fountain (eJOI20_fountain) C++14
30 / 100
511 ms 46552 KB
#include <bits/stdc++.h>
using namespace std;
int srednica[100009];
int pojemnosc[100009];
vector<int>D[100009];
vector<int>D2[100009];
int V[100009][20];
long long V2[100009][20];
void DFS(int v, int poprzedni, int poprzedni_odl)
{
    int ind=poprzedni;
    long long odl=poprzedni_odl;
    for(int i=0;i<=18;i++)
    {
        V2[v][i]=odl;
        V[v][i]=ind;
        odl+=V2[ind][i];
        ind=V[ind][i];
    }
    for(int i=0;i<D[v].size();i++)
    {
        int somsiad=D[v][i];
        DFS(somsiad,v,D2[v][i]);
    }
}
int main()
{ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int r,l;
        cin>>r>>l;
        srednica[i]=r;
        pojemnosc[i]=l;
    }
    map<int,int>M;
    M[1000000009]=0;
    D[0].push_back(1);
    D2[0].push_back(1000000009);
    for(int i=n;i>=1;i--)
    {
        int r=srednica[i];
        int l=pojemnosc[i];
        D[M.upper_bound(r)->second].push_back(i);
        D2[M.upper_bound(r)->second].push_back(pojemnosc[i]);
        M[r]=i;
    }
///-=-=-==-==-=-==-==-=-=-==-=-==-==-==-=-==-==-=-==-=-==-==-=-=-=
    DFS(0,0,0);
///-==-=--==-==-=-==-==--==--==-==-=-==-==-=-==-==-==-=-==-==-=-==-
    /**cout<<endl<<endl;
    for(int i=0;i<=n;i++)
    {
        cout<<endl<<"i="<<i<<"| ";
        for(int j=0;j<10;j++)
        {
            cout<<V[i][j]<<" ";
        }
    }
    cout<<endl;
    cout<<endl;
    for(int i=0;i<=n;i++)
    {
        cout<<endl<<"i="<<i<<"| ";
        for(int j=0;j<10;j++)
        {
            cout<<V2[i][j]<<" ";
        }
    }
    cout<<endl<<endl;**/
///-=-==-=-==-=-==-=-==-==-=-===-=-==-==-=-==-=-==-==--=-=
    vector<int>odp;
    for(int i=1;i<=m;i++)
    {
        int ind;
        long long k;
        cin>>ind>>k;
        for(int j=18;j>=0;j--)
        {
            if(V2[ind][j]<k)
            {
                k-=V2[ind][j];
                ind=V[ind][j];
            }
            if(ind==0){break;}
        }
        cout<<ind<<endl;
    }
    return 0;
}
/**
9 100
4 8
5 10
6 16
3 4
4 13
5 15
3 16
8 3
3 4
**/





Compilation message

fountain.cpp: In function 'void DFS(int, int, int)':
fountain.cpp:20:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   20 |     for(int i=0;i<D[v].size();i++)
      |                 ~^~~~~~~~~~~~
fountain.cpp: In function 'int main()':
fountain.cpp:44:13: warning: unused variable 'l' [-Wunused-variable]
   44 |         int l=pojemnosc[i];
      |             ^
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 5020 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 455 ms 46552 KB Output is correct
2 Correct 511 ms 43836 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 5020 KB Output isn't correct
2 Halted 0 ms 0 KB -