Submission #691017

#TimeUsernameProblemLanguageResultExecution timeMemory
691017raul2008487Fountain (eJOI20_fountain)C++17
60 / 100
842 ms8744 KiB
#include <bits/stdc++.h> #define ll long long #define pb push_back #define vl vector<ll> #define endl "\n" #define INF 0x3F3F3F3F using namespace std; int main(){ ll n,q,r,x,i; cin>>n>>q; vl d(n+1),c(n+1),pre(n+2),parent(n+1); pre[0]=0; bool as=1; stack<ll> s; for(i=1;i<=n;i++){ cin>>d[i]>>c[i]; if(i>1){if(d[i]<=d[i-1]){as=0;}} pre[i]=pre[i-1]+c[i]; while(s.size()>0&&d[i]>d[s.top()]){ parent[s.top()]=i; s.pop(); } s.push(i); } if(as){ while(q--){ cin>>r>>x; ll nw=x+pre[r-1]; ll idx=upper_bound(pre.begin(),pre.end(),nw)-pre.begin(); if(pre[idx-1]==nw){ cout<<idx-1<<endl; } else if(idx==(n+1)){ cout<<0<<endl; } else{ cout<<idx<<endl; } } } else{ ll idx,cs; while(s.size()>0){ parent[s.top()]=0; s.pop(); } for(i=1;i<=q;i++){ cin>>idx>>x; for(cs=idx;x>0&&cs!=0;cs=parent[cs]){ if(x-c[cs]<=0){ cout<<cs<<endl;break; } else{ x-=c[cs]; } //cout<<cs<<' '; } if(cs==0){ cout<<0<<endl; } } } } /* 5 10 3 5 5 7 7 9 9 11 11 13 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...