Submission #1294595

#TimeUsernameProblemLanguageResultExecution timeMemory
1294595tudor_costinSails (IOI07_sails)C++20
30 / 100
1096 ms13040 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int Nmax=1e5+5;
set<int> poz[Nmax];
pair<int,int> a[Nmax];
signed main()
{
    int n;
    cin>>n;
    int maxi=0;
    for(int i=1;i<=n;i++) poz[0].insert(i);
    for(int i=1;i<=n;i++)
    {
        cin>>a[i].first>>a[i].second;
    }
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    {
        int h=a[i].first,k=a[i].second;
        vector<pair<int,int>> chpoz;
        for(int cnt=0;cnt<=maxi;cnt++)
        {
            auto it=poz[cnt].upper_bound(h);
            if(it==poz[cnt].begin()) continue;
            it--;
            for(it;true;it--)
            {
                int x=(*it);
                chpoz.push_back({x,cnt});
                k--;
                if(k==0 || it==poz[cnt].begin()) break;
            }
            if(k==0) break;
        }
        for(auto [x,cnt]:chpoz)
        {
            poz[cnt].erase(poz[cnt].find(x));
            poz[cnt+1].insert(x);
            maxi=max(maxi,cnt+1);
        }
    }
    int ans=0;
    for(int cnt=0;cnt<=maxi;cnt++)
    {
        int nums=poz[cnt].size();
        ans+=nums*cnt*(cnt-1)/2;
    }
    cout<<ans<<'\n';
    return 0;
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...