Pagini recente » Cod sursa (job #1042953) | Cod sursa (job #1749114) | Cod sursa (job #1721831) | Cod sursa (job #525046) | Cod sursa (job #1170149)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 2001, T = 1501;
class Ssm{
int best, sum, minSum;
public:
Ssm(){
best = sum = minSum = 0;
}
inline void insert(int x){
sum += x;
if (sum < minSum)
minSum = sum;
if (best + minSum < sum)
best = sum - minSum;
}
inline int getSsm(){
return best;
}
};
vector<int> event[T];
int oferta[N], nrOferte, salariu;
int getProfit(int pret){
Ssm S;
for (int i = 0 ; i < T ; i++){
while (!event[i].empty() && event[i].back() < pret)
event[i].pop_back();
S.insert( pret * event[i].size() - salariu );
}
return S.getSsm();
}
inline bool descrescator(const int x, const int y){
return x > y;
}
int main(){
int timp;
ifstream in("carnati.in");
in >> nrOferte >> salariu;
for (int i = 1 ; i <= nrOferte ; i++){
in >> timp >> oferta[i];
event[timp].push_back( oferta[i] );
}
in.close();
for (int i = 0 ; i < T ; i++)
sort(event[i].begin(), event[i].end(), descrescator);
sort(oferta + 1, oferta + nrOferte + 1);
int best = 0;
for (int i = 1 ; i <= nrOferte ; i++)
best = max(best, getProfit(oferta[i]));
ofstream out("carnati.out");
out << best << '\n';
out.close();
return 0;
}