# HDU5517 沈阳现场赛 二维树状数组

182人阅读 评论(0)

/*

vec[i]来存放a,c,d中的c，d以及a,c,d这个元素的元素

*/
#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn = 100005;

struct ppp{
int a,b;
scanf("%d%d",&a,&b);
}
}A[maxn];
struct pp{
int c,d,e;
scanf("%d%d%d",&c,&d,&e);
}
}B[maxn];
struct ttt{
int x,y,cnt;
ttt(int _c,int _d,int _cnt){
x = _c,y = _d,cnt = _cnt;
}
};
int n,m;
int max_a[maxn][2];
vector<ttt> vec[maxn];
int sum[1005][1005];
inline int lowbit(int x){
return x & -x;
}
int query(int x,int y){
int ret = 0;
for(int i = x;i >= 1;i -= lowbit(i)){
for(int j = y;j >= 1;j -= lowbit(j)){
ret += sum[i][j];
}
}
return ret;
}
for(int i = x;i <= 1000;i += lowbit(i)){
for(int j = y;j <= 1000;j += lowbit(j)){
sum[i][j] += 1;
}
}
}
int cmp(ttt a,ttt b){
return (a.x != b.x) ? a.x > b.x : a.y > b.y;
}

void init(){
for(int i= 0;i < maxn;i++){
max_a[i][0] = max_a[i][1] = 0;
vec[i].clear();
}
for(int i = 1,a,b;i <= n;i++){
scanf("%d%d",&a,&b);
if(max_a[b][0] < a){
max_a[b][0] = a;
max_a[b][1] = 1;
}else if(max_a[b][0] == a){
max_a[b][1]++;
}
}
for(int i = 1,c,d,e;i <= m;i++){
scanf("%d%d%d",&c,&d,&e);
if(max_a[e][1] != 0){
//			cout<<max_a[e][0]<<" "<<max_a[e][1]<<endl;
vec[max_a[e][0]].push_back(ttt(c,d,max_a[e][1]));
}
}
mem(sum,0);
}

int main(){
int T;
scanf("%d",&T);
for(int cas = 1;cas <= T;cas++){
scanf("%d%d",&n,&m);
init();
for(int i = 0;i < maxn;i++)sort(vec[i].begin(),vec[i].end(),cmp);
for(int i = 0;i < maxn;i++){
for(int j = 1;j < vec[i].size();j++){
if(vec[i][j - 1].x == vec[i][j].x && vec[i][j - 1].y == vec[i][j].y){
vec[i][j].cnt += vec[i][j - 1].cnt;
vec[i][j - 1].cnt = 0;
}
}
}
int now;
int ans = 0;
for(int i = maxn - 1;i >= 0;i--){
for(int j = 0;j < vec[i].size();j++){
if(vec[i][j].cnt == 0)continue;
now = query(1000,1000);
now -= query(vec[i][j].x - 1,1000);
now -= query(1000,vec[i][j].y - 1);
now += query(vec[i][j].x - 1,vec[i][j].y - 1);
if(now <= 0){
ans += vec[i][j].cnt;
//					cout<<i<<" "<<vec[i][j].x<<" "<<vec[i][j].y<<" "<<vec[i][j].cnt<<endl;
}
}
}
printf("Case #%d: %d\n",cas,ans);
}
}

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：11411次
• 积分：602
• 等级：
• 排名：千里之外
• 原创：50篇
• 转载：2篇
• 译文：0篇
• 评论：2条
文章分类
最新评论