Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //#pragma comment(linker, "/stack:200000000")
- //#pragma GCC optimize("Ofast")
- //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- //#pragma GCC optimize("unroll-loops")
- #include <iostream>
- #include <stdlib.h>
- #include <cmath>
- #include <algorithm>
- #include <vector>
- #include <queue>
- #include <deque>
- #include <set>
- #include <map>
- #include <unordered_map>
- #include <unordered_set>
- #include <random>
- #include <assert.h>
- #include <memory.h>
- #include <time.h>
- #include <bitset>
- #define uint unsigned int
- #define ll long long
- #define ull unsigned long long
- #define ld long double
- #define rep(i, l, r) for (int i = (l); i < (r); i++)
- #define repb(i, r, l) for (int i = (r); i > (l); i--)
- #define sz(a) (int)a.size()
- #define fi first
- #define se second
- #define mp(a, b) make_pair(a, b)
- #define rank qwertyuio
- #define next dfghjk
- #define prev fhsgfhjf
- #define plus fsghsf
- #define minus ytryr
- using namespace std;
- inline bool setmin(int &x, int y) { return (y < x) ? x = y, 1 : 0; }
- inline bool setmax(int &x, int y) { return (y > x) ? x = y, 1 : 0; }
- inline bool setmin(ll &x, ll y) { return (y < x) ? x = y, 1 : 0; }
- inline bool setmax(ll &x, ll y) { return (y > x) ? x = y, 1 : 0; }
- const int N = 200000 + 239;
- const int inf = (int)1e9 + 1;
- const ll big = (ll)1e18 + 1;
- const int P = 239;
- const int P1 = 31;
- const int P2 = 57;
- const int MOD = (int)1e9 + 7;
- const int MOD1 = (int)1e9 + 9;
- const int MOD2 = 998244353;
- const ld eps = 1e-12;
- const double pi = atan2(0, -1);
- const int ABC = 26;
- ll a[N];
- void add(int l, int r, int k, int t) {
- if (l > r) {
- return;
- }
- int k1 = k + (r - l) * t;
- a[l] += k;
- a[l + 1] += t - k;
- a[r + 1] += -(k1 + t);
- a[r + 2] += k1;
- }
- void eval() {
- rep(j, 0, 2) {
- rep(i, 1, N) {
- a[i] += a[i - 1];
- }
- }
- }
- int main()
- {
- //freopen("a.in", "r", stdin);
- //freopen("a.out", "w", stdout);
- ios_base::sync_with_stdio(0);
- cin.tie(0);
- cout.precision(20);
- cout << fixed;
- //ll TL = 10.95 * CLOCKS_PER_SEC;
- //clock_t time = clock();
- int n;
- cin >> n;
- int b[n];
- rep(i, 0, n) {
- cin >> b[i];
- }
- map<int, int> last;
- rep(i, 0, n) {
- int lst = -1;
- if (last.count(b[i])) {
- lst = last[b[i]];
- }
- last[b[i]] = i;
- int cur = 1;
- int m1 = 1, m2 = min(i - lst, n - i), m3 = max(i - lst, n - i), m4 = n - lst;
- add(m1, m2 - 1, cur, 1);
- cur += 1 * (m2 - m1);
- add(m2, m3 - 1, cur, 0);
- cur += 0 * (m3 - m2);
- add(m3, m4, cur, -1);
- }
- eval();
- rep(i, 1, n + 1) {
- cout << a[i] << " ";
- }
- cout << "\n";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement