Submission #831771

#TimeUsernameProblemLanguageResultExecution timeMemory
831771nninPilot (NOI19_pilot)C++14
100 / 100
439 ms53092 KiB
#include<bits/stdc++.h>
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
using namespace std;

int n, q;
ll ans[1000002];
pii y[1000002], h[1000002];

ll ctFlights(int mount) {
    return (ll)mount*(mount+1)/2;
}

int dsu[1000002], sz[1000002];
bool over[1000002];
int par(int x) {
    if(dsu[x]==0) return x;
    else return dsu[x] = par(dsu[x]);
}

ll curct;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin>>n>>q;
    for(int i=1;i<=n;i++) {
        cin>>h[i].f;
        h[i].s = i;
    }
    sort(h+1, h+n+1);
    for(int i=1;i<=q;i++) {
        cin>>y[i].f;
        y[i].s = i;
    }
    sort(y+1, y+q+1);
    int hi = 1;
    for(int yi=1;yi<=q;yi++) {
        while(hi<=n && h[hi].f<=y[yi].f) {
            over[h[hi].s] = 1;
            sz[h[hi].s] = 1;
            if(h[hi].s+1<=n && over[h[hi].s+1]) {
                int p = par(h[hi].s+1);
                curct -= ctFlights(sz[p]);
                dsu[p] = h[hi].s;
                sz[h[hi].s] += sz[p];
            }
            if(h[hi].s-1>=1 && over[h[hi].s-1]) {
                int p = par(h[hi].s-1);
                curct -= ctFlights(sz[p]);
                dsu[h[hi].s] = p;
                sz[p] += sz[h[hi].s];
            }
            curct += ctFlights(sz[par(h[hi].s)]);
            hi++;
        }
        ans[y[yi].s] = curct;
    }
    for(int i=1;i<=q;i++) {
        cout<<ans[i]<<'\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...