제출 #1268710

#제출 시각아이디문제언어결과실행 시간메모리
1268710abdelhakim식물 비교 (IOI20_plants)C++20
14 / 100
4093 ms5700 KiB
// #include <bits/stdc++.h>
// #include "plants.h"
// #define ll long long
// #define inf (ll) 1e17
// using namespace std;
// vector<ll> p;
// ll n;
// void printvec(vector<ll>& vec)
// {
//     for (auto &&e : vec)
//     {
//         cout << e << ' ';   
//     }
    
//     cout << endl;
// }
// ll maxn=2e5;
// vector<ll> tree(4*maxn+4);
// vector<ll> lazy(4*maxn+4);
// void prop(ll node, ll l, ll r)
// {
//     tree[node]+=lazy[node];
//     if(l==r)
//     {
//         lazy[node]=0;
//         return;
//     }
//     lazy[node*2+1]+=lazy[node];
//     lazy[node*2+2]+=lazy[node];
//     lazy[node]=0;
// }
// void update(ll node, ll l, ll r, ll x, ll y, ll val)
// {
//     prop(node,l,r);
//     if(max(l,x) > min(r,y)) return;
//     if(x<=l && r<=y)
//     {
//         lazy[node]+=val;
//         prop(node,l,r);
//         return;
//     }
//     ll mid=(l+r)/2;
//     update(node*2+1,l,mid,x,y,val);
//     update(node*2+2,mid+1,r,x,y,val);
//     tree[node]=min(tree[node*2+1],tree[node*2+2]);
// }
// ll query(ll node, ll l, ll r, ll x, ll y)
// {
//     prop(node,l,r);
//     if(max(l,x) > min(r,y)) return inf;
//     if(x<=l && r<=y)
//     {
//         return tree[node];
//     }
//     ll mid=(l+r)>>1;
//     return min(query(node*2+1,l,mid,x,y),query(node*2+2,mid+1,r,x,y));
// }
// void decrease(ll l, ll r)
// {
//     if(l<=r)
//     {
//         update(0,0,n-1,l,r,-1);
//     }
//     else
//     {
//         update(0,0,n-1,l,n-1,-1);
//         if(r>=0)
//         update(0,0,n-1,0,r,-1);
//     }
// }
// ll findsmallest(ll l, ll r)
// {
//     ll ans=-1;
//     ll oldl=l;
//     while(l<=r)
//     {
//         ll mid=(l+r)>>1;
//         ll vl=query(0,0,n-1,oldl,mid);
//         if(vl==0)
//         {
//             ans=mid;
//             r=mid-1;
//         }
//         else
//         {
//             l=mid+1;
//         }
//     }
//     return ans;
// }
// ll findbiggest(ll l, ll r)
// {
//     ll ans=-1;
//     ll oldr=r;
//     while(l<=r)
//     {
//         ll mid=(l+r)>>1;
//         ll vl=query(0,0,n-1,mid,oldr);
//         if(vl==0)
//         {
//             ans=mid;
//             l=mid+1;
//         }
//         else
//         {
//             r=mid-1;
//         }
//     }
//     return ans;
// }
// void init(int k, std::vector<int> r)
// {
//     n=r.size();
//     p.resize(n);
//     vector<bool> vis(n);
//     for (int i=0;i<n;i++)
//     {
//         r[i]=k-1-r[i];
//     }
//     for (int i=0;i<n;i++)
//     {
//         update(0,0,n-1,i,i,r[i]);
//     }
//     for (int i=0;i<n;i++)
//     {
//         ll ind=findsmallest(0,n-1);
//         if(ind+k<n)
//         {
//             ll vl=findsmallest(ind+k,n-1);
//             if(vl!=-1)
//             {
//                 ind=vl;
//             }
//         }
//         vis[ind]=true;
//         update(0,0,n-1,ind,ind,inf);
//         p[ind]=i;
//         decrease((ind-k+1+n)%n,ind-1);  
//     }
// }
// int compare_plants(int x, int y)
// {
//     if(p[x]<p[y]) return -1;
//     else return 1;
// }

#include <bits/stdc++.h>
#include "plants.h"
#define ll long long
#define inf (ll) 1e17
using namespace std;
vector<ll> p;
ll n;
void printvec(vector<ll>& vec)
{
    for (auto &&e : vec)
    {
        cout << e << ' ';   
    }
    
    cout << endl;
}
void init(int k, std::vector<int> r)
{
    n=r.size();
    p.resize(n);
    vector<bool> vis(n);
    for (int i=0;i<n;i++)
    {
        r[i]=k-1-r[i];
    }
    for (int i=0;i<n;i++)
    {
        ll ind=0;
        bool qrbti=false;
        for (int j=0;j<n;j++)
        {
            if(vis[j]) continue;
            if(r[j]==0&&!qrbti)
            {
                ind=j;
                j+=k-1;
                qrbti=true;
            }
            else if(r[j]==0)
            {
                ind=j;break;
            }
        }
        vis[ind]=true;
        p[ind]=i;
        for (int j=ind-1;j>=ind-k+1;j--)
        {
            ll index=j;
            if(index < 0) index+=n;
            r[index]--;
        }
        
    }
}
int compare_plants(int x, int y)
{
    if(p[x]<p[y]) return -1;
    else return 1;
}
#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...