比赛之树状数组题

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 #define F first
 7 #define S second
 8 #define MP(a,b) make_pair( make_pair(a,b) , -1 )
 9 typedef pair< pair<int,int> , int> coder ;
10 const int maxn = 300010 ;
11 const int N = 100000 ;
12
13 int sum[N+1] , ans[maxn] ;
14 coder p[maxn] ;
15
16 inline int lowbit(int x){
17     return x & -x ;
18 }
19 void update(int x) {
20     for(; x<=N; x+=lowbit(x))  sum[x]++ ;
21 }
22 int query(int x) {
23     int ret = 0 ;
24     for(; x>0 ; x-=lowbit(x)) ret += sum[x] ;
25     return ret ;
26 }
27
28 int main()
29 {
30     int n ;
31     scanf("%d", &n);
32     for(int i=1; i<=n; i++)
33         scanf("%d%d", &p[i].F.F , &p[i].F.S) , p[i].S = i ;
34     sort(p+1 , p+1+n) ;
35     int y = 1;
36
37     for(int i=1; i<=n; i++) {
38         int u = p[i].S ;
39         while(y<i && p[y].F.F < p[i].F.F) {
40             update(p[y++].F.S) ;
41         }
42         ans[u] += query(p[i].F.S) ;
43         if(y < i) {
44             ans[u] += lower_bound(p+y , p+i , MP(p[i].F.F , p[i].F.S)) - p  - y ;
45         }
46     }
47
48     for(int i=1; i<=n; i++)
49         printf("%d\n" , ans[i]) ;
50
51     return 0;
52 }

AC参考代码

题目:

C - Coder Ratings

Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu

Submit Status Practice SPOJ RATING

Description

Some of the more elite (and not-so-elite) coders around take part in a certain unnamed programming contest. In said contest, there are multiple types of competitions. Here, we consider the Open and High School competition types. For each type, each competitor receives a rating, an integer between 1 and 100000, inclusive. A coder‘s rating is based upon his or her level of performance in matches and is calculated using a complicated formula which, thankfully, you will not be asked to implement.

Although the Open and High School ratings for a coder who has participated in both competition types lately are usually close, this is not always the case. In particular, High School matches are more about speed, since many coders are able to solve all the problems, whereas Open matches require more thinking and there is a steeper curve in terms of problem difficulty.

Problem Statement
You are given N coders (1 ≤ N ≤ 300000), conveniently numbered from 1 to N. Each of these coders participates in both High School and Open matches. For each coder, you are also given an Open rating Ai and a High School rating Hi. Coder i is said to be better than coder j if and only if both of coder i‘s ratings are greater than or equal to coder j‘s corresponding ratings, with at least one being greater. For each coder i, determine how many coders coder i is better than.

Input Format
On the first line of input is a single integer N, as described above.
N lines then follow. Line i+1 contains two space-separated integers, Ai and Hi.

Output Format
Line i should contain the number of coders that coder i is better than.

Sample Input

8
1798 1832
862 700
1075 1089
1568 1557
2575 1984
1033 950
1656 1649
1014 1473

Sample Output

6
0
2
4
7
1
5
1

比赛之树状数组题

时间: 2024-10-14 16:42:17

比赛之树状数组题的相关文章

【BZOJ4785】[Zjoi2017]树状数组 树套树(二维线段树)

[BZOJ4785][Zjoi2017]树状数组 Description 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道基础的树状数组题.给出一个长度为 n 的数组 A,初始值都为 0,接下来进行 m 次操作,操作有两种: 1 x,表示将 Ax 变成 (Ax + 1) mod 2. 2 l r,表示询问 sigma(Ai) mod 2,L<=i<=r 尽管那个时候的可怜非常的 simple,但是她还是发现这题可以用树状数组做.当时非常yo

【bzoj4785】[Zjoi2017]树状数组 线段树套线段树

题目描述 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道基础的树状数组题.给出一个长度为 n 的数组 A,初始值都为 0,接下来进行 m 次操作,操作有两种: 1 x,表示将 Ax 变成 (Ax + 1) mod 2. 2 l r,表示询问 sigma(Ai) mod 2,L<=i<=r 尽管那个时候的可怜非常的 simple,但是她还是发现这题可以用树状数组做.当时非常young 的她写了如下的算法: 1: function Add(x

Zjoi2017树状数组

2.1 题目描述 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的 OI 比赛经历.那是一道基础的树状数组题. 给出一个长度为 n 的数组 A,初始值都为 0,接下来进行 m 次操作,操作有两种: ? 1 x,表示将 Ax 变成 (Ax + 1) mod 2. ? 2 l r,表示询问 ( ∑r i=l Ai) mod 2. 尽管那个时候的可怜非常的 simple,但是她还是发现这题可以用树状数组做. 当时非常 young 的她写了如下的算法: 1: functio

[BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)

4785: [Zjoi2017]树状数组 Time Limit: 40 Sec  Memory Limit: 512 MBSubmit: 297  Solved: 195[Submit][Status][Discuss] Description 漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的OI 比赛经历.那是一道 基础的树状数组题.给出一个长度为 n 的数组 A,初始值都为 0,接下来进行 m 次操作,操作有两种: 1 x,表示将 Ax 变成 (Ax + 1)

bzoj4785【Zjoi2017】树状数组

漆黑的晚上,九条可怜躺在床上辗转反侧.难以入眠的她想起了若干年前她的一次悲惨的 OI 比赛经历.那是一道基础的树状数组题. 给出一个长度为 nn 的数组 AA,初始值都为 00,接下来进行 mm 次操作,操作有两种: 1 x1 x, 表示将 AxAx 变成 (Ax+1)mod2(Ax+1)mod2. 2 l r2 l r, 表示询问 (∑ri=lAi)mod2(∑i=lrAi)mod2. 尽管那个时候的可怜非常的 simple,但是她还是发现这题可以用树状数组做.当时非常 young 的她写了如

vijos p1512——SuperBrother打鼹鼠(树状数组)(复习)

背景 SuperBrother在机房里闲着没事干(再对比一下他的NOIP,真是讽刺啊......),于是便无聊地开始玩“打鼹鼠”...... 描述 在这个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother也不时地会想知道某一个范围的鼹鼠总数.这就是你的任务

二维树状数组——SuperBrother打鼹鼠(Vijos1512)

树状数组(BIT)是一个查询和修改复杂度都为log(n)的数据结构,主要用于查询任意两位之间的所有元素之和,其编程简单,很容易被实现.而且可以很容易地扩展到二维.让我们来看一道很裸的二维树状数组题: 在一个“打鼹鼠”的游戏中,鼹鼠会不时地从洞中钻出来,不过不会从洞口钻进去(鼹鼠真胆大……).洞口都在一个大小为n(n<=1024)的正方形中.这个正方形在一个平面直角坐标系中,左下角为(0,0),右上角为(n-1,n-1).洞口所在的位置都是整点,就是横纵坐标都为整数的点.而SuperBrother

poj 2155 二维树状数组

http://poj.org/problem?id=2155 Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17721   Accepted: 6653 Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. I

Poj(2352)——Stars(树状数组)

Description Astronomers often examine star maps where stars are represented by points on a plane and each star has Cartesian coordinates. Let the level of a star be an amount of the stars that are not higher and not to the right of the given star. As