제출 #1346990

#제출 시각아이디문제언어결과실행 시간메모리
1346990WarinchaiFountain (eJOI20_fountain)C++20
30 / 100
40 ms8780 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std;

int d[100005];
int c[100005];
int ans[100005];
vector<pair<int,int>>qr[100005];

int32_t main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,q;cin>>n>>q;
    for(int i=1;i<=n;i++)cin>>d[i]>>c[i];
    for(int i=0;i<q;i++){
        int r,v;cin>>r>>v;
        qr[r].push_back({v,i});
    }
    vector<pair<int,int>>s;
    s.push_back({0,0});
    for(int i=n;i>=1;i--){
        while(s.size()>1&&d[i]>=d[s.back().first])s.pop_back();
        int sum=c[i];
        sum+=s.back().second;
        s.push_back({i,sum});
        //cerr<<"i:"<<i<<"\n";
        //for(auto x:s)cerr<<x.first<<" "<<x.second<<"\n";
        for(auto [temp,id]:qr[i]){
            if(temp>sum){
                //cerr<<"temp:"<<temp<<" "<<sum<<"\n";
                ans[id]=0;
                continue;
            }
            int st=1,en=s.size()-1;
            int tans=0;
            while(st<=en){
                int m=(st+en)/2;
                if(sum-s[m-1].second>=temp){
                    tans=m;
                    st=m+1;
                }else{
                    en=m-1;
                }
            }
            ans[id]=s[tans].first;
        }
    }
    for(int i=0;i<q;i++)cout<<ans[i]<<'\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...