社区讨论

蒟蒻看不出来哪里错了

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 条回复,欢迎继续交流。

正在加载回复...