-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy path1622.cpp
More file actions
46 lines (41 loc) · 929 Bytes
/
1622.cpp
File metadata and controls
46 lines (41 loc) · 929 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Fancy {
private:
long long add;
long long mul;
long long mod = 1e9 + 7;
vector<long long> nums;
long long inv(long long a) {
if (a == 1) return 1;
return (mod - mod / a) * inv(mod % a) % mod;
}
public:
Fancy() {
add = 0;
mul = 1;
}
void append(int val) {
nums.push_back(((val - add + mod) % mod) * inv(mul) % mod);
}
void addAll(int inc) {
add += inc;
add %= mod;
}
void multAll(int m) {
add *= m;
mul *= m;
add %= mod;
mul %= mod;
}
int getIndex(int idx) {
if (idx >= nums.size()) return -1;
return (nums[idx] * mul + add) % mod;
}
};
/**
* Your Fancy object will be instantiated and called as such:
* Fancy* obj = new Fancy();
* obj->append(val);
* obj->addAll(inc);
* obj->multAll(m);
* int param_4 = obj->getIndex(idx);
*/