poj3928 Ping pong 樹狀數組,poj3928pong
http://poj.org/problem?id=3928
Ping pong
| Time Limit: 1000MS |
|
Memory Limit: 65536K |
| Total Submissions: 2087 |
|
Accepted: 798 |
Description
N(3<=N<=20000) ping pong players live along a west-east street(consider the street as a line segment). Each player has a unique skill rank. To improve their skill rank, they often compete with each other. If two players want to compete, they must choose a referee among other ping pong players and hold the game in the referee's house. For some reason, the contestants can't choose a referee whose skill rank is higher or lower than both of theirs. The contestants have to walk to the referee's house, and because they are lazy, they want to make their total walking distance no more than the distance between their houses. Of course all players live in different houses and the position of their houses are all different. If the referee or any of the two contestants is different, we call two games different. Now is the problem: how many different games can be held in this ping pong street?
Input
The first line of the input contains an integer T(1<=T<=20), indicating the number of test cases, followed by T lines each of which describes a test case.
Every test case consists of N + 1 integers. The first integer is N, the number of players. Then N distinct integers a1, a2 ... aN follow, indicating the skill rank of each player, in the order of west to east. (1 <= ai <= 100000, i = 1 ... N).
Output
For each test case, output a single line contains an integer, the total number of different games.
Sample Input
1 3 1 2 3
Sample Output
1
Source
Beijing 2008
題意:每個人有個能力值,兩兩就行比賽必須有個裁判,裁判能力值必須在兩個人之間位置也必須在兩個人之間,問不同的比賽安排有多少種。簡單題解:題裡面有句,Now is the problem,脫口而出挖掘機技術哪家強233.。。。想到枚舉裁判就行了,求下每個人作為裁判的方案有多少種,就是求前面有多少個比它大(小),後面有多少個比它大(小)就行。和求逆序數一樣樹狀數組隨便搞搞就行。。。。代碼:
/** * @author neko01 *///#pragma comment(linker, "/STACK:102400000,102400000")#include <cstdio>#include <cstring>#include <string.h>#include <iostream>#include <algorithm>#include <queue>#include <vector>#include <cmath>#include <set>#include <map>using namespace std;typedef long long LL;#define min3(a,b,c) min(a,min(b,c))#define max3(a,b,c) max(a,max(b,c))#define pb push_back#define mp(a,b) make_pair(a,b)#define clr(a) memset(a,0,sizeof a)#define clr1(a) memset(a,-1,sizeof a)#define dbg(a) printf("%d\n",a)typedef pair<int,int> pp;const double eps=1e-9;const double pi=acos(-1.0);const int INF=0x3f3f3f3f;const LL inf=(((LL)1)<<61)+5;const int N=20005;const int M=100005;int bit[M];int f[N];int a[N];LL sum(int i){ LL s=0; while(i>0) { s+=bit[i]; i-=i&-i; } return s;}void add(int i,int x){ while(i<=M) { bit[i]+=x; i+=i&-i; }}int main(){ int t; scanf("%d",&t); while(t--) { int n; clr(bit); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d",&a[i]); f[i]=sum(a[i]); add(a[i],1); } clr(bit); LL ans=0; for(int i=n-1;i>=0;i--) { int x=sum(a[i]); int y=n-i-1-x; ans+=(LL)(f[i]*y); ans+=(LL)((i-f[i])*x); add(a[i],1); } printf("%lld\n",ans); } return 0;}
The aften play ping pong after school否定句一般疑問句並回答對play ping pong提問
They 【seldom】 play ping-pong after school.
Do they often play ping-pong after school?
Yes, they do .
No, they don't.
What do they often do after school?
注意:
often(經常)的反義詞應該是seldom(很少)
always(一直)的反義詞才是never(從不)
ping-pong與table tennis有什不同?
沒錯,兩者都可以表示乒乓球,後者比較正式點