Submission #1286092

#TimeUsernameProblemLanguageResultExecution timeMemory
1286092eri16Festival (IOI25_festival)C++20
0 / 100
55 ms10276 KiB
#include <bits/stdc++.h>
//#include "festival.h"
using namespace std;

long long fnd(vector <long long>& k, long long num){
    
    long long l=0;
    long long r=k.size()-1;
    
    if (num >= k[r]) return r;

    while (l<r) {
        long long md=(l+r+1)/2;
        if (k[md]<=num)
            l=md;     
        else
            r=md-1;  
    }
    return l;
}

vector<int> max_coupons(int A,vector<int> P,vector <int> T){
     
     
     
    vector <pair<long long,long long>> vp1;
    vector <pair<long long,long long>> vp2;
    vector <long long> psum1;
    vector <long long> psum2;
    long long sm1=0;
    long long sm2=A;
    
    vp1.push_back({0,-1});
    vp2.push_back({0,-1});
    
    
    for (long long i=0; i<P.size(); i++){
        if (T[i]==1){
        vp1.push_back({P[i],i});
    }}
    for (long long i=0; i<P.size(); i++){
        if (T[i]==2){
        vp2.push_back({P[i],i});
    }}
    
    sort(vp1.begin(),vp1.end());
    sort(vp2.begin(),vp2.end());
    
    for (long long i=0; i<vp1.size(); i++){
        sm1+=vp1[i].first;
        psum1.push_back(sm1);
    }
    
    for (long long i=0; i<vp2.size(); i++){
        sm2-=vp2[i].first;
        if (vp2[i].first==0){
        psum2.push_back(sm2);            
        }
        else if (sm2>=0){
        sm2=sm2*2;
        psum2.push_back(sm2);
        }
        else{
        psum2.push_back(-1);
        }
    }
    
    
    vector <int> ans;
    
    for (long long i=1; i<vp2.size(); i++){
        ans.push_back(vp2[i].second);
    }
    for (long long i=1; i<vp1.size(); i++){
        ans.push_back(vp1[i].second);        
    }
    return ans;
    
    long long k=0,maxh=0,maxpos=-1;
    
    for (long long i=0; i<vp2.size(); i++){
        if (psum2[i]>=0){
        long long kk=fnd(psum1,psum2[i]);
        if (kk+i>=maxh){maxpos=i;maxh=kk+i;}
    }}
    
    for (long long i=1; i<=maxpos; i++){
        ans.push_back(vp2[i].second);
    }
    for (long long i=1; i<=maxh-maxpos; i++){
        ans.push_back(vp1[i].second);        
    }
    /*
    for (long long i=0; i<psum1.size(); i++){
        cout<<psum1[i]<<' ';
    }    
    cout<<"\n";
    for (long long i=0; i<psum2.size(); i++){
        cout<<psum2[i]<<' ';
    }    
    cout<<"\n";    
    */



    return (ans);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...