제출 #223695

#제출 시각아이디문제언어결과실행 시간메모리
223695FieryPhoenixSails (IOI07_sails)C++11
40 / 100
1096 ms2284 KiB
#include <bits/stdc++.h>
using namespace std;

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
typedef long long ll;
typedef long double ld;
#define INF 2001001001
#define MOD 1000000007

int N,H[100001],K[100001];
int cnt[100001];

int main()
{
  //ios_base::sync_with_stdio(0);cin.tie(0);
  //freopen (".in","r",stdin);
  //freopen (".out","w",stdout);
  cin>>N;
  vector<pair<int,int>>v;
  for (int i=0;i<N;i++){
    cin>>H[i]>>K[i];
    v.push_back({H[i],K[i]});
  }
  sort(v.begin(),v.end());
  for (int i=0;i<N;i++){
    /*
    cout<<"SAIL "<<i<<": "<<v[i].first<<' '<<v[i].second<<endl;
    for (int i=0;i<=10;i++)
      cout<<cnt[i]<<' ';
    cout<<endl;
    */
    int pre=0;
    if (i>0) pre=v[i-1].first;
    cnt[0]+=v[i].first-pre;
    int k=v[i].second;
    deque<pair<int,int>>did;
    for (int j=0;;j++){
      if (cnt[j]>=k){
	did.push_front({j,k});
	k=0;
	break;
      }
      else{
	did.push_front({j,cnt[j]});
	k-=cnt[j];
      }
    }
    for (auto it:did){
      cnt[it.first]-=it.second;
      cnt[it.first+1]+=it.second;
    }
  }
  ll ans=0;
  for (ll i=1;i<=100000;i++){
    ll num=cnt[i];
    ans+=num*(i*(i-1))/2;
  }
  cout<<ans<<endl;
  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...