超时求解
查看原帖
超时求解
549858
still_alive楼主2023/7/12 14:00

RT.

#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct node{
	ll x,y;
}e[5001000];
ll c[5001000],n,m;
ll lowbit(ll x){
	return x&-x;
}
bool cmp(node a,node b){
	return a.x==b.x?a.y<b.y:a.x<b.x;
}
void add(ll x,ll k){
	for(ll i=x;i<=n;i+=lowbit(i)) c[i]+=k;
}
int sum(ll x){
	int ans=0;
	for(ll i=x;i>0;i-=lowbit(i)) ans+=c[i];
	return ans; 
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
	ll T;
	cin>>T;
	for(ll testCase=1;testCase<=T;testCase++){
		ll k;
		cin>>n>>m>>k;
		memset(c,0,sizeof(c));
		memset(e,0,sizeof(e));
		for(ll i=1;i<=k;i++){
			cin>>e[i].x>>e[i].y;
		}
		sort(e+1,e+k+1,cmp);
		int ans=0;
		for(ll i=k;i>=1;i--){
			add(e[i].y,1);
			ans+=sum(e[i].y-1);
		}
		cout<<"Test case "<<testCase<<": "<<ans<<endl;
	}
} 
2023/7/12 14:00
加载中...