Submission #960532

#TimeUsernameProblemLanguageResultExecution timeMemory
960532inesfiFountain (eJOI20_fountain)C++17
100 / 100
222 ms28976 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define endl "\n" const int TAILLEMAXI=100*1000+2,INFINI=1000*1000*1000+2,LOGMAXI=19; int nbcercles,nbquestions,val,noeud,ajouter,contenance,numcercle; int peres[TAILLEMAXI][LOGMAXI],cumu[TAILLEMAXI]; vector<int> enfant[TAILLEMAXI]; deque<pair<int,int>> encours; set<pair<int,int>> atrouver; signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>nbcercles>>nbquestions; cumu[0]=INFINI; for (int icercle=1;icercle<=nbcercles;icercle++){ cin>>val>>contenance; atrouver.insert(make_pair(val,icercle)); while ((*(atrouver.begin())).first<val){ enfant[icercle].push_back((*(atrouver.begin())).second); peres[(*(atrouver.begin())).second][0]=icercle; atrouver.erase(atrouver.begin()); } cumu[icercle]=contenance; } while ((int)atrouver.size()!=0){ peres[(*(atrouver.begin())).second][0]=0; enfant[0].push_back((*(atrouver.begin())).second); atrouver.erase(atrouver.begin()); } encours.push_back(make_pair(0,0)); while ((int)encours.size()!=0){ noeud=encours.front().first; ajouter=encours.front().second; encours.pop_front(); cumu[noeud]+=ajouter; for (int ienfant=0;ienfant<enfant[noeud].size();ienfant++){ encours.push_back(make_pair(enfant[noeud][ienfant],cumu[noeud])); } } /*for (int isommet=1;isommet<=nbcercles;isommet++){ cout<<cumu[isommet]<<" "<<peres[isommet]<<endl; }*/ for (int ilog=1;ilog<LOGMAXI;ilog++){ for (int isommet=1;isommet<=nbcercles;isommet++){ peres[isommet][ilog]=peres[peres[isommet][ilog-1]][ilog-1]; } } for (int iquestion=0;iquestion<nbquestions;iquestion++){ cin>>numcercle>>contenance; for (int ilog=LOGMAXI-1;ilog>=0;ilog--){ if (cumu[numcercle]-cumu[peres[numcercle][ilog]]<contenance){ contenance-=cumu[numcercle]-cumu[peres[numcercle][ilog]]; numcercle=peres[numcercle][ilog]; } } cout<<numcercle<<endl; } return 0; }

Compilation message (stderr)

fountain.cpp: In function 'int main()':
fountain.cpp:41:35: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |         for (int ienfant=0;ienfant<enfant[noeud].size();ienfant++){
      |                            ~~~~~~~^~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...