Codeforces1045G


做法:按半径r从大到小枚举,对于每个q,枚举对应位置可能的q值,对每个q,维护出现的坐标x,每次查询半径内的已经出现的坐标的数目即可。需要实现一个插入单点加,查询区间和的操作,动态开点线段树即可。看来还是要学习一下pb_ds了。

#include <bits/stdc++.h>
typedef long long ll;
const int N = 1e5 + 7;
const ll lim = 1e9 + 7;
inline int read() {char c = getchar(); int x = 0, f = 1;while( ! isdigit(c) ) { if(c == '-') f = -1; c = getchar(); }while( isdigit(c) ) { x = x*10 + c - '0'; c = getchar(); }return x * f;
}
inline void write( ll x ) {if( x >= 10 ) write( x / 10 );putchar( x % 10 + '0' );
}
using namespace std;
int n , k;
ll ans = 0;
struct node { ll x , r , q; } a[N];
bool cmp( node a , node b ) { return a.r > b.r; }
set< ll > hv;
struct Tree {int lson , rson; ll sum;
}T[ N * 100 ];
map< ll , int > rt;
int cnt = 0;
void ins( int &rt , ll l , ll r , ll p ) {if( ! rt ) rt = ++ cnt;++ T[ rt ].sum;if( l == r ) return;ll mid = ( l + r ) >> 1;if( p <= mid ) ins( T[ rt ].lson , l , mid , p);else ins( T[ rt ].rson , mid + 1 , r , p );
}
ll ask( int rt , ll l , ll r , ll p ) {if( ! rt ) return 0;if( r <= p ) return T[ rt ].sum;ll mid = ( l + r ) >> 1;if( p <= mid ) return ask( T[rt].lson , l , mid , p );else if( p > mid ) return T[ T[ rt ].lson ].sum + ask( T[rt].rson , mid + 1 , r , p );
}
int main() {n = read(), k = read();for ( int i = 1 ; i <= n ; ++ i ) {a[ i ].x = read() , a[ i ].r = read() , a[ i ].q = read();hv.insert( a[ i ].q );}sort(a + 1 , a + n + 1 , cmp );int p = 0;for ( int i = 1 ; i <= n ; ++ i ) {for ( ll t = a[ i ].q - k; t <= a[ i ].q + k ; ++ t)if( hv.find(t) != hv.end() ) {ans +=  ask( rt[t] , 0 , lim , a[ i ].x + a[ i ].r );ans -= ask( rt[t] , 0 , lim , a[ i ].x - a[ i ].r - 1);}ins( rt[a[ i ].q] , 0 , lim , a[i].x );}write( ans ); putchar( '\n' );return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9727342.html

Codeforces1045G相关推荐

最新文章

  1. [Android基础] VideoView
  2. 一条python语句实现BGR图像转RGB图像
  3. 自然语言处理NLP,如何使用AMBERT算法建立多粒度token预训练语言模型
  4. linux禁止线程网络,linux – 如何在gdb中禁用新线程/线程退出的消息?
  5. 吴恩达深度学习笔记13-Course4-Week4【人脸识别和神经风格转换】
  6. [Linux网络编程]ARP简单实例
  7. (转)DB2 db2diag.log 日志分析
  8. 快手极速版自动评论脚本
  9. 数据库系统概念 第二章 习题答案
  10. 学好数据结构的重要性
  11. 这部计算机27厘米宽英语怎么说,24/27/32英寸电脑显示器的尺寸是多少?长和宽几厘米?显示长度,宽度和面积的算法...
  12. 解决vue项目路由出现message: “Navigating to current location (XXX) is not allowed“的问题
  13. PEI表面修饰CNTs步骤及原理
  14. 机器翻译和人工智能翻译,语言学与机器翻译
  15. 创建链表:头插法与尾插法
  16. arima模型 白噪声检验_白噪声模型
  17. how to upload directory to github(怎么把文件目录上传到github)
  18. pyqt制作简单的摄像头监控界面
  19. SpringBoot时区配置
  20. MATLAB中求一个矩阵的最大值或最小值的两种写法

热门文章

  1. vba 不等于_EXCEL中VBA基础语句(1)
  2. 软件构造学习笔记-第十三周
  3. LeetCode 501二叉搜索树中的众数-简单
  4. 高等数学上-赵立军-北京大学出版社-题解-练习5.4
  5. C++用Prim算法实现无向图最小生成树
  6. 哈希表添加哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。typedef enum{ HASH_OK, -icoding
  7. 数据结构----二叉树叶子结点到根节点的高度计算
  8. P4173 残缺的字符串 FFT匹配含有通配符的字符串
  9. Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp
  10. Prefix HDU - 5790 字典树 + 主席树