Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- struct ent{
- int day;
- int id;
- int change;
- };
- bool compareDay(const ent& a, const ent& b){
- return a.day < b.day;
- }
- int main(){
- ifstream fin("measurement.in");
- ofstream fout("measurement.out");
- int N, G;
- fin >> N >> G;
- vector<ent> entries(N);
- vector<int> cowID;
- map<int, int> cowInfo;
- for(int i = 0; i<N; i++){
- fin >> entries[i].day >> entries[i].id >> entries[i].change;
- cowInfo.insert({entries[i].id, G});
- if(find(cowID.begin(), cowID.end(), entries[i].id) != cowID.end()){
- //cout << "found: " << entries[i].id << endl;
- }else{
- cowID.push_back(entries[i].id);
- //cout << "pushed back: " << entries[i].id << endl;
- }
- //cout << entries[i].day << " " << entries[i].id << " " << entries[i].change << endl;
- }
- sort(entries.begin(), entries.end(), compareDay);
- int ans = 0;
- int mx = G;
- int mx2 = 0;
- int recordHolder2 = 0;
- int recordHolder = 0;
- int currNumDisplay = 0;
- //cout << "cowID.size(): " << cowID.size() << endl;
- for(int i = 0; i<N; i++){
- int currId = entries[i].id;
- cowInfo[currId] += entries[i].change;
- if(cowInfo[currId] > mx){
- mx2 = mx;
- mx = cowInfo[currId];
- //cout << "greater than max" << endl;
- currNumDisplay = 1;
- recordHolder2 = recordHolder;
- recordHolder = currId;
- ans++;
- continue;
- }else if(entries[i].change < 0 && currId == recordHolder){
- if(mx2 >= cowInfo[currId]){
- //currNumDisplay--;
- recordHolder = recordHolder2;
- mx = mx2;
- //ans++;
- }
- }
- //int curMax = mx;
- int cnt = 0;
- for(int j = 0; j<cowID.size(); j++){
- if(cowInfo[cowID[j]] == mx){
- cnt++;
- }
- }
- //cout << "i = " << i << ", current max: " << mx << ", count: " << cnt << ", currently on display: " << currNumDisplay << endl;
- if(cnt != currNumDisplay){
- ans++;
- currNumDisplay = cnt;
- }
- //cout << "changed ID: " << currId << ", to " << cowInfo[currId] << endl;
- //if(cowInfo[currId] > mx){
- //mx2 = mx;
- //mx = cowInfo[currId];
- //if(currId != recordHolder){
- //cout << "greater than max" << endl;
- //currNumDisplay = 1;
- //recordHolder2 = recordHolder;
- //recordHolder = currId;
- //ans++;
- //}
- //}else if(entries[i].change < 0 && currId == recordHolder){
- //if(mx2 >= cowInfo[currId]){
- //currNumDisplay--;
- //recordHolder = recordHolder2;
- //mx = mx2;
- //ans++;
- //}
- //}else if(entries[i].change > 0 && cowInfo[currId] == mx){
- //currNumDisplay++;
- //cout << "increase to become equal" << endl;
- //recordHolder = currId;
- //ans++;
- //}
- //cout << "currently on display: " << currNumDisplay << endl;
- }
- fout << ans << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment