codevs 1471 線段 字首和
阿新 • • 發佈:2018-11-04
codevs 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;
}