这是题目
难度:红
结果为:20分,AC2个点,TLE8个点
代码为:
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[50005],len,ans,c[50005],t[50005],b[50005];
struct o{
int id,x,y,l,r;
}s[50005];
bool f(o x,o y){
int q=x.x*x.l/len,p=y.x*y.l/len;
if(q!=p)return q<p;
return x.y*x.r<y.y*y.r;
}
signed main(){
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
len=sqrt(n);
cin>>m;
for(int i=0;i<m;i++)cin>>s[i].x>>s[i].y>>s[i].l>>s[i].r,s[i].id=i;
sort(s,s+m,f);
for(int i=0,j=1,ii=0,jj=1,k=0;k<m;k++){
int id=s[k].id,x=s[k].x,y=s[k].y,l=s[k].l,r=s[k].r;
while(i<y)c[a[++i]]++,ans+=t[a[i]];
while(i>y)c[a[i]]--,ans-=t[a[i]],i--;
while(j<x)c[a[j]]--,ans-=t[a[j]],j++;
while(j>x)c[a[--j]]++,ans+=t[a[j]];
while(ii<r)t[a[++ii]]++,ans+=c[a[ii]];
while(ii>r)t[a[ii]]--,ans-=c[a[ii]],ii--;
while(jj<l)t[a[jj]]--,ans-=c[a[jj]],jj++;
while(jj>l)t[a[--jj]]++,ans+=c[a[jj]];
b[id]=ans;
}
for(int i=0;i<m;i++)cout<<b[i]<<endl;
return 0;
}
吐槽为:TNND,怎么不给LZAC,F**K
求助语为:跪求大佬帮蒟蒻看看要怎么调qwq,万分谢谢!!!