Submission #121762

#TimeUsernameProblemLanguageResultExecution timeMemory
121762turbatSails (IOI07_sails)C++14
0 / 100
1088 ms2688 KiB
    #include <bits/stdc++.h>
    using namespace std;
    #define N 100005
     
    int n, mh;
    long long  sum, cnt[N], s[N], ans, p, uld, avr;
    pair <int, int> mast[N];
     
    void solve (int l){
    	if (l > mh) return;
    	p = l;
    	// cout << l<< endl;
    	for (int i = l;i <= mh;i++){
    		if((s[i] - s[l - 1]) / (i - l + 1) >= (s[p] - s[l - 1]) / (p - l + 1))
    			p = i;
    	}
    		
    	sum = s[p] - s[l - 1];
    	avr = sum / (p - l + 1);
    	uld = sum % (p - l + 1);
    	ans += uld * avr;
    	ans += (p - l + 1) * avr * (avr - 1) / 2;
    	solve (p + 1);
    }
     
    int main (){
    	ios_base::sync_with_stdio(NULL);
    	cin.tie(NULL);
    	cin >> n;
    	for (int i = 0;i < n;i++){
    		cin >> mast[i].first>> mast[i].second;
    		mh = max(mh, mast[i].first);
    		cnt[mast[i].first]++;
    		cnt[mast[i].first - mast[i].second]--;
    	}
    	for (int i = mh;i > 0;i--) cnt[i] += cnt[i + 1];
    	for (int i = 1;i <= mh;i++) { 
    		s[i] = s[i - 1] + cnt[i];
    		// cout << s[i] << endl;
    	}
    	solve (1);
    	cout << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...