Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <stdlib.h>
- #include <algorithm>
- #include <fstream>
- #include <iterator>
- #define MAXN 100000
- using namespace std;
- typedef pair<int,int> pi;
- pi A[MAXN]; // ARRAY DI PAIR
- int main(){
- ifstream cin("input.txt");
- int N,D,P; // N PALI - N POSTI BANDIERE - N POSTI BANDIERE DA OCCUPARE AL IESIMO PALO
- cin >> N;
- long long int RIS = 0; // RISULTATO
- int MAX_D = 0; // LA LUNGHEZZA DEL PALO PIU LUNGO TROVATO FIN ORA
- for(int i=0;i<N;i++){
- cin >> D >> P;
- // SE TROVO UN PALO PIU LUNGO TRA QUELLI TROVATI FIN ORA
- if(D>MAX_D){
- // RIEMPIO L'ARRAY CON TUTTI I NUOVI POSTI
- // CON RESISTENZA AL VENTO -1 E INDICE J CRESCENTE
- for(int j=MAX_D;j<D;j++)A[j] = {-1,j};
- MAX_D = D; // ORA IL PALO PIU LUNGO E' QUESTO
- }
- // ORDINO I POSTI DEL PALO
- sort(A,A+MAX_D);
- // OCCUPO QUEI POSTI
- for(int j=0,k = 0;j<P;j++,k++){
- // MI CHIEDO SE IL MIO PALO E' SUFFICENTEMENTE LUNGO
- if(A[k].second<D){
- // SE SI INCREMENTO LA POS DI QUELL INDICE
- A[k].first++;
- // E LO AGGIUNGO AL RISULTATO
- RIS += A[k].first;
- }else{
- // ALTRIMENTI VUOL DIRE CHE LA BANDIERA CHE AVREI DOVUTO
- //AGGIUNGERE LA AGGIUNGERO' DA QUALCHE ALTRA PARTE...
- j--;
- }
- }
- }
- cout << RIS;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement