#include #include #include using namespace std; class NumArray { public: NumArray(vector& nums); void update(int index, int val); int sumRange(int left, int right); }; NumArray::NumArray(vector& nums) { } void NumArray::update(int index, int val) { (void) index; (void) val; return; } int NumArray::sumRange(int left, int right) { (void) left; (void) right; return 0; } int main() { vector v; int i, ln, n, index, val, l, r, tmp; NumArray *na; istringstream ss; vector sv; string line, w; bool print; long long sum; na = NULL; ln = 0; while (getline(cin, line)) { try { ln++; ss.clear(); sv.clear(); ss.str(line); while (ss >> w) sv.push_back(w); if (sv.size() == 0 || sv[0][0] == '#') { // do nothing } else if (sv[0] == "NEW") { v.clear(); for (i = 1; i < sv.size(); i++) v.push_back(atoi(sv[i].c_str())); if (na != NULL) delete na; na = new NumArray(v); } else if (sv[0] == "UPDATE") { if (sv.size() != 3) throw (string) "UPDATE needs three words."; if (na == NULL) throw (string) "Need to create a NumArray"; na->update(atoi(sv[1].c_str()), atoi(sv[2].c_str())); } else if (sv[0] == "SUMRANGE") { if (sv.size() != 3) throw (string) "SUMRANGE needs three words."; if (na == NULL) throw (string) "Need to create a NumArray"; i = na->sumRange(atoi(sv[1].c_str()), atoi(sv[2].c_str())); cout << i << endl; } else if (sv[0] == "NEWRAND") { if (sv.size() != 3) throw (string) "NEWRAND seed numitems."; v.clear(); srand48(atoi(sv[1].c_str())); n = atoi(sv[2].c_str()); for (i = 0; i < n; i++) v.push_back((drand48()-0.5)*200); if (na != NULL) delete na; na = new NumArray(v); } else if (sv[0] == "PRINTV") { for (i = 0; i < v.size(); i++) cout << v[i] << endl; } else if (sv[0] == "URAND") { if (sv.size() != 3) throw (string) "URAND seed numitems."; if (na == NULL) throw (string) "Need to create a NumArray"; srand48(atoi(sv[1].c_str())); n = atoi(sv[2].c_str()); for (i = 0; i < n; i++) { index = drand48()*v.size(); val = (drand48()-0.5)*200; v[index] = val; na->update(index, val); } } else if (sv[0] == "SUMRAND" || sv[0] == "SUMRAND-P") { if (sv.size() != 3) throw (string) "SUMRAND seed numitems."; if (na == NULL) throw (string) "Need to create a NumArray"; print = (sv[0][sv[0].size()-1] == 'P'); srand48(atoi(sv[1].c_str())); n = atoi(sv[2].c_str()); sum = 0; for (i = 0; i < n; i++) { l = drand48()*v.size(); r = drand48()*v.size(); if (r < l) { tmp = r; r = l; l = tmp; } if (print) cout << l << " " << r << endl; sum += na->sumRange(l, r); } cout << sum << endl; } } catch (const string &s) { cout << "Error on line " << ln << ": " << s << endl; } } if (na != NULL) delete na; return 0; }