Japan
Description Japan plans to welcome the ACM ICPC World Finals and a lot of roads must be built for the venue. Japan is tall island with N cities on the East coast and M cities on the West coast (M <= 1000, N <= 1000). K superhighways will be build. Cities on each coast Input The input file starts with T - the number of test cases. Each test case starts with three numbers – N, M, K. Each of the next K lines contains two numbers – the numbers of cities connected by the superhighway. The first one is the number of the city on the Output For each test case write one line on the standard output: Test case (case number): (number of crossings) Sample Input 1 3 4 4 1 4 2 3 3 2 3 1 Sample Output Test case 1: 5 Source #include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> #include<stdlib.h> using namespace std; int n,m,k; __int64 c[1000100]; struct node { int x; int y; } q[1000500]; bool cmp(node a,node b) { if(a.x==b.x) { return a.y<=b.y; } else { return a.x<b.x; } } int lowbit(int x) { return x&(-x); } void updata(int i,int t) { while(i<=m) { c[i] += t; i = i + lowbit(i); } } __int64 getsum(int i) { __int64 sum = 0; while(i>0) { sum += c[i]; i = i - lowbit(i); } return sum; } int main() { int T; int p = 0; scanf("%d",&T); while(T--) { scanf("%d%d%d",&n,&m,&k); memset(c,0,sizeof(c)); for(int i=0; i<k; i++) { scanf("%d%d",&q[i].x,&q[i].y); } __int64 ans = 0; sort(q,q+k,cmp); for(int i=0; i<k; i++) { updata(q[i].y,1); ans += getsum(m) - getsum(q[i].y); } printf("Test case %d: %I64d\n",++p,ans); } return 0; } |
POJ 3067 Japan(树状数组/求逆序数)
时间: 2024-10-17 08:35:32
POJ 3067 Japan(树状数组/求逆序数)的相关文章
POJ 3067 Japan 树状数组求逆序对
题目大意:有两排城市,这两排城市之间有一些路相互连接着,求有多少条路相互交叉. 思路:把所有的路先按照x值从小到大排序,x值相同的按照y值从小到大排序,然后插入边的时候,先找有多少比自己y值小的,这些边的x值一定比自己大,也就是一个逆序对,然后统计起来.记得答案要用long long (__int64) CODE: #include <cstdio> #include <cstring> #include <iostream> #include <algorith
poj 2299 树状数组求逆序数+离散化
http://poj.org/problem?id=2299 最初做离散化的时候没太确定但是写完发现对的---因为后缀数组学的时候,,这种思维习惯了吧 1.初始化as[i]=i:对as数组按照num[]的大小间接排序 2.bs[as[i]]=i:现在bs数组就是num[]数组的离散化后的结果 3.注意,树状数组中lowbit(i) i是不可以为0的,0&(-0)=0,死循环... #include <cstdio> #include <cstring> #include
树状数组求逆序数
poj 2299 树状数组求逆序数题目链接:http://poj.org/problem?id=2299 1 #include <stdio.h> 2 #include <string.h> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <queue> 7 #include <stack> 8 #include <
ZOJ-2386 Ultra-QuickSort 【树状数组求逆序数+离散化】
Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. For the input seque
HDU 1394 Minimum Inversion Number (树状数组求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 13942 Accepted Submission(s): 8514 Problem Description The inversion number of a given number sequence a1, a2, ..., a
hdu 5147 Sequence II (树状数组 求逆序数)
题目链接 Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 331 Accepted Submission(s): 151 Problem Description Long long ago, there is a sequence A with length n. All numbers in this se
hdu 1394 Minimum Inversion Number (裸树状数组 求逆序数)
题目链接 题意: 给一个n个数的序列a1, a2, ..., an ,这些数的范围是0-n-1, 可以把前面m个数移动到后面去,形成新序列:a1, a2, ..., an-1, an (where m = 0 - the initial seqence)a2, a3, ..., an, a1 (where m = 1)a3, a4, ..., an, a1, a2 (where m = 2)...an, a1, a2, ..., an-1 (where m = n-1)求这些序列中,逆序数最少的
poj2299 Ultra-QuickSort 树状数组求逆序数
poj2299 Ultra-QuickSort 树状数组求逆序数 Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 49587 Accepted: 18153 Description In this problem, you have to analyze a particular sorting algorithm. The algorithm processes a sequenc
Codeforces Round #261 (Div. 2) D. Pashmak and Parmida&#39;s problem (树状数组求逆序数 变形)
题目链接 题意: 给出一些数a[n],求(i, j), i<j 的数量,使得:f(1, i, a[i]) > f(j, n, a[j]) . f(lhs, rhs, x) 指在 { [lhs, rhs]范围中,a[k]的值=x } 的数量. 1. f(1, i, a[i]) 就是指a[i]前面包括a[i]的数中,有几个值=a[i]. 2. f(j, n, a[j]) 就是指a[j]后面包括a[j]的数中有几个值=a[j]. 虽然a[x]范围不小,但是n的范围是1000,不是很大,所以我们可
Dynamic Inversions II 逆序数的性质 树状数组求逆序数
Dynamic Inversions II Time Limit: 6000/3000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitStatus Problem Description 给出N个数a[1],a[2] ... a[N],a[1]...a[N]是1-N的一个排列,即1 <= a[i] <= N且每个数都不相同.有M个操作,每个操作给出x,y两个数,你将a[x],a[y]交换,然后求交换后数组的逆序