Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define fi first
- #define se second
- #define pb push_back
- #define pf push_front
- #define popb pop_back
- #define popf pop_front
- #define ins insert
- #define pq priority_queue
- #define minele min_element
- #define maxele max_element
- #define lb lower_bound //first pos >= val
- #define ub upper_bound // first pos > val
- #define cnt_bit __builtin_popcount
- #define debug(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
- //#pragma GCC optimize("Ofast")
- //#pragma GCC target("avx,avx2,fma")
- using namespace std;
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- typedef long long ll;
- typedef pair<ll, ll> pll;
- typedef pair<int, int> pii;
- int d4x[4] = {1, 0, -1, 0}; int d4y[4] = {0, 1, 0, -1};
- int d8x[8] = {0, 1, 1, 1, 0, -1, -1, -1};
- int d8y[8] = {1, 1, 0, -1, -1, -1, 0, 1};
- const ll oo = 1e18;
- const ll maxN = 1e5 + 10;
- /* Author : Le Ngoc Bao Anh, 10A5, LQD High School for Gifted Student */
- void maximize(int &a, int b) {
- a = max(a, b);
- }
- void minimize(int &a, int b) {
- a = min(a, b);
- }
- set<int> pos[maxN];
- int a[maxN];
- void solve() {
- int n; cin >> n;
- for(int i = 1; i <= n; i++) {
- cin >> a[i];
- pos[a[i]].ins(i);
- }
- for(int i = 1; i <= 1e5; i++) {
- pos[i].ins(0); pos[i].ins(n + 1);
- }
- auto cost = [&](int len) -> ll {
- return 1ll * len * (len - 1) / 2 + len;
- };
- ll ans = 0;
- auto f = [&]() -> void {
- const int mxN = 1e5;
- for(int i = 1; i <= mxN; i++) {
- if(pos[i].size() < 2) continue;
- ans += cost(n);
- int p = 0;
- for(auto id : pos[i]) {
- if(id == 0) continue;
- int x = id - p - 1;
- ans -= cost(x);
- p = id;
- }
- }
- };
- f();
- int q; cin >> q;
- while(q--) {
- int d, val; cin >> d >> val;
- int k = a[d];
- auto it = pos[k].find(d);
- int x = *(--it);
- it++; it++;
- int y = *(it);
- pos[k].erase(--it);
- ans += cost(d - x - 1);
- ans += cost(y - d - 1);
- ans -= cost(y - x - 1);
- pos[val].ins(d);
- a[d] = val;
- it = pos[val].find(d);
- x = *(--it);
- it++; it++;
- y = *(it);
- ans += cost(y - x - 1);
- ans -= cost(d - x - 1);
- ans -= cost(y - d - 1);
- cout << ans << "\n";
- }
- }
- int main()
- {
- ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
- #ifndef ONLINE_JUDGE
- freopen("input.txt", "r", stdin);
- freopen("output.txt", "w", stdout);
- #else
- //online
- #endif
- int tc = 1, ddd = 0;
- // cin >> tc;
- while(tc--) {
- //ddd++;
- //cout << "Case #" << ddd << ": ";
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement