程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> POJ 3067 Japan(樹狀數組 )

POJ 3067 Japan(樹狀數組 )

編輯:關於C++

題意:在東邊有n座城市,從北到南編號依次為1,2,3.n 在西邊有m座城市,從北到南編號分別為1,2,3.m 現要在南北城市之間修建k條超級高速公路,求會出現多少個十字路口

思路:找到合適的統計方法,先經過適當排序,再用RMQ解決


//2756 KB	469 ms	
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const int M = 1e6+100;
int n,m,k;
struct Way
{
    int u,v;
}es[M];
bool cmp(const Way&a,const Way&b)
{
    if(a.u==b.u) return a.v>b.v;
    return a.u>b.u;
}
int sum[1010];
inline int lowbit(int x)
{
    return x&-x;
}
int getsum(int rt)
{
    int s=0;
    for(int i=rt;i>0;i-=lowbit(i))
        s+=sum[i];
    return s;
}
void update(int  rt)
{
    for(int i=rt;i<=1000;i+=lowbit(i))
    {
        sum[i]++;
    }
}
int main()
{
    int T;
    scanf("%d",&T);
    for(int cas=1;cas<=T;cas++)
    {
        memset(sum,0,sizeof(sum));
        scanf("%d%d%d",&n,&m,&k);
        for(int i=0;i

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved