1. 程式人生 > >codevs 1471 線段 字首和

codevs 1471 線段 字首和

codevs 1471 線段 字首和

  • 傳送門:http://codevs.cn/problem/1471/

  • 這道題就是簡單的一維字首和問題,其中心思想就是:對一個輸入的線段,其左端點加一,右端點後一位減一,以此來標記一條線段。最後通過累計字首和,就能夠得到每個點線上段中出現的次數,這個技巧不難理解

  • 還有其它的題目型別,比如求二維字首和、結合差分等,後續有做到這類題再進行記錄

  • 程式碼如下:

//
//  main.cpp
//  progress
//
//  Created by J__Max on 2018/10/19.
//  Copyright © 2018年 J__Max. All rights reserved.
// #include <iostream> #include <stdio.h> #define MAXN 50000 + 10 using namespace std; int a[MAXN], ans[MAXN]; void solve(){ int n, m; int l, r; cin>>n; for(int i=0; i<n; i++){ scanf("%d%d",&l, &r); //對一個輸入的線段,其左端點加一,右端點後一位減一,以此來標記一條線段 a[
l]++; a[r+1]--; } for(int i=0; i<=50000; i++){ //累計字首和 ans[i] = ans[i-1] + a[i]; } cin>>m; for(int i=0; i<m; i++){ scanf("%d", &l); printf("%d\n", ans[l]); } } int main(int argc, const char * argv[]) { solve(); return 0;
}