# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
402506 | NintsiChkhaidze | Poklon (COCI17_poklon) | C++14 | 926 ms | 43424 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define ll long long
#define s second
#define f first
#define pb push_back
#define left (node<<1),l,(l+r)>>1
#define right ((node<<1)|1),((l+r)>>1)+1,r
using namespace std;
const int N = 500005;
pair<int,int> b[N];
vector <pair<int,int>> v[N];
int a[N],ind[4][N],sgt[4*N],ans[N];
void upd(int node,int l,int r,int ind,int val){
if (l == r){
sgt[node] = val;
return;
}
if (ind > ((l+r)>>1)) upd(right,ind,val);
else upd(left,ind,val);
sgt[node] = sgt[(node<<1)] + sgt[((node<<1)|1)];
}
ll get(int node,int l,int r,int L,int R){
if (r < L || R < l) return 0;
if (L <= l && r <= R) return sgt[node];
ll x = get(left,L,R),y = get(right,L,R);
return x+y;
}
int main (){
ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL);
int n,m;
cin>>n>>m;
for (int i=1;i<=n;i++)
cin>>b[i].f,b[i].s=i;
sort(b+1,b+n+1);
a[b[1].s] = 1;
for (int i=2;i<=n;i++){
a[b[i].s] = a[b[i - 1].s];
if (b[i].f > b[i-1].f) a[b[i].s]++;
}
for (int i=1;i<=m;i++){
int l,r;
cin>>l>>r;
v[l].pb({r,i});
}
for (int i=n;i>=1;i--){
if (ind[3][a[i]]) upd(1,1,n,ind[3][a[i]],0);
if (ind[2][a[i]]) upd(1,1,n,ind[2][a[i]],-1);
if (ind[1][a[i]]) upd(1,1,n,ind[1][a[i]],1);
for (int j=0;j<v[i].size();j++){
int r = v[i][j].f,ind = v[i][j].s;
ans[ind] = get(1,1,n,i,r);
}
ind[3][a[i]] = ind[2][a[i]];
ind[2][a[i]] = ind[1][a[i]];
ind[1][a[i]] = i;
}
for (int i=1;i<=m;i++)
cout<<ans[i]<<"\n";
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |