社区讨论
蒟蒻看不出来哪里错了
P2709【模板】莫队 / 小B的询问参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m014ohrd
- 此快照首次捕获于
- 2024/08/19 23:05 2 年前
- 此快照最后确认于
- 2024/08/19 23:14 2 年前
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
using i64 = long long;
using i128 = __int128;
using pii = std::pair < int, int >;
using mii = std::map < int, int >;
using vii = std::vector < int >;
using sii = std::set < int >;
using uset = std::unordered_set < int >;
using umap = std::unordered_map < int, int >;
#define fi first
#define se second
#define pb push_back
#define ma make_pair
#define eb emplace_back
#define all(x) x.begin(), x.end()
#define fup(x, l, r) for (int x = (l), eNd = (r); x <= eNd; ++ x )
#define fdw(x, r, l) for (int x = (r), eNd = (l); x >= eNd; -- x )
#define fst std::ios::sync_with_stdio(false); std::cin.tie(0); std::cout.tie(0);
const int N = 1e6 + 10;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int n,m,k;
struct node{
int l,r,id;
}q[N];
int a[N];
int vis[N];
int bl;
bool cmp(node a,node b){
return ((a.l/bl)==(b.l/bl)?a.r<b.r:a.l<b.l);
}
int ans;
void add(int x){
ans+=2*vis[a[x]]+1;
vis[a[x]]++;
}
void del(int x){
ans-=2*vis[a[x]]+1;
vis[a[x]]--;
}
int res[N];
void solve(){
cin>>n>>m>>k;
fup(i,1,n){
cin>>a[i];
}
bl=sqrt(n);
fup(i,1,m){
cin>>q[i].l>>q[i].r;
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=1,r=0;
fup(i,1,m){
int ql=q[i].l,qr=q[i].r;
while(l<ql) del(l++);
while(l>ql) add(--l);
while(r<qr) add(++r);
while(r>qr) del(r--);
res[q[i].id]=ans;
}
fup(i,1,m){
cout<<res[i]<<'\n';
}
}
signed main(void){
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
fst
int T=1;
// cin>>T;
while(T--) solve();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...