HDU 5124 轉化爲最大前綴和

這道題是看了 BestCoder 的題解才AC的,,雖然自己的做法沒有它快,但不知道錯在何處 ;

思路:對於每一條 line ,令 xi 的權值爲1 , yi+1 的權值爲 -1 , 對所有的節點排序, 求最大前綴和 ;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;

const int N = 100000 + 11 ;

pair<int ,int> arr[N<<1] ;

int main() {//freopen("data.in" , "r",  stdin) ;
    int t , n ;
    scanf("%d" ,&t) ;
    while(t--) {
        scanf("%d" ,&n) ;
        int k = 0 ;
        int a , b ;
        for(int i =  0 ; i < n ; ++i) {
            arr[k].second = 1 ;
            scanf("%d" ,&arr[k++].first) ;
            arr[k].second = -1 ;
            scanf("%d" ,&arr[k++].first) ;
            arr[k-1].first++ ;
        }
        sort(arr , arr+k) ;
        int m = 0 ;
        int sum = 0 ;
        for(int i = 0 ; i <k ; ++i) {
            sum += arr[i].second ;
            if(sum > m) m = sum ;
            if(sum < 0) sum = 0 ;
        }
        printf("%d\n" , m) ;
    }
}
WA的代碼,如果有人看到那錯了,麻煩請告訴我

#include <iostream>
#include <cstdio>
#include <vector>
#include <cstring>
#include <set>
#include <algorithm>
using namespace std ;

const int N = 100000 + 11 ;

vector<pair<int , int> > arr(N) ;
bool flag[N] ;

int main() {
    int t , n ;
    scanf("%d" ,&t) ;
    while(t--) {
        set<int> sset ;
        arr.clear() ;
        memset(flag , 0 , sizeof(flag)) ;
        scanf("%d" ,&n) ;
        int a , b;
        for(int i = 0 ; i < n ;++i) {
            scanf("%d%d",&a ,&b);
            arr.push_back(make_pair(a , b)) ;
        }
        sort(arr.begin() ,arr.end()) ;
        int m = 0 ;
        for(int i = n-1 ; i >= 0 ; --i) {
            const int& a = arr[i].first ;
            if(sset.count(a)) continue ;
            sset.insert(a) ;
            int sum = 0 ;
            for(int j = i ; j >= 0 ; --j) {
                if(arr[j].second >= a) {
                    ++sum ;
                }else break ;
            }
            if(sum > m) m = sum ;
        }
        printf("%d\n" , m) ;
    }
}



發佈了48 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章