POJ
来源:互联网 发布:淘宝网儿童女式凉鞋 编辑:程序博客网 时间:2024/06/03 19:21
考查树状数组 + 排序
// 树状数组 + 排序#include <cstdio>#include <string.h>#include <algorithm>#define MAX 100010using namespace std;typedef long long LL;typedef struct { LL x; LL y; LL id;} Node;Node node[MAX];LL c[MAX];LL ans[MAX];LL lowbit( LL i ) { return i & ( -i );}void update( LL i, LL val, LL n ) { while( i <= n ) { c[i] = c[i] + val; i = i + lowbit( i ); }}LL getSum( LL i ) { LL ans = 0; while( i > 0 ) { ans = ans + c[i]; i = i - lowbit( i ); } return ans;}bool cmp( Node a, Node b ) { //if( a.y == b.y ) return a.x < b.x ? 1 : 0; //return a.y > b.y ? 1 : 0; if( a.y != b.y ) return a.y > b.y ? 1 : 0; return a.x < b.x ? 1 : 0;}int main() { LL n; while( scanf( "%lld", &n ) != EOF ) { if( n == 0 ) break; memset( c, 0, sizeof( c ) ); memset( ans, 0, sizeof( ans ) ); for( LL i = 1; i <= n; i++ ) { scanf( "%lld%lld", &node[i].x, &node[i].y ); node[i].id = i; node[i].x++; node[i].y++; } sort( node + 1, node + 1 + n, cmp ); ans[node[1].id] = getSum( node[1].x ); update( node[1].x, 1, MAX ); for( LL i = 2; i <= n; i++ ) { if( node[i].x == node[i - 1].x && node[i].y == node[i - 1].y ) { ans[node[i].id] = ans[node[i - 1].id]; update( node[i].x, 1, MAX ); } else { ans[node[i].id] = getSum( node[i].x ); update( node[i].x, 1, MAX ); } } for( LL i = 1; i <= n; i++ ) { if( i == 1 ) printf( "%lld", ans[i] ); else printf( " %lld", ans[i] ); } printf( "\n" ); } return 0;}
阅读全文
0 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- Android--网络图片查看器
- Android学习日志——第10天
- appium的python脚本编写前准备(三)
- static的基本规则
- Ubuntu16.04下通过tar.gz包安装MySQL5.5.52
- POJ
- 服务器网络故障处理——ping丢包或不通时链路测试说明
- 制作根文件系统通过NFS使之挂在到ok6410开发板上
- Shortest Unsorted Continuous Subarray
- 求两个链表的第一个公共结点各种情况及三种思路分析
- List循环添加对象的推荐方式
- jQuery选择器之id选择器
- 安卓写入文件读取文件初步
- Java学习笔记(十四)--IO流