陣列上的詢問【字首和】
給出一個有N個元素的陣列A,元素的值要麼是1,要麼是-1。
給出M次詢問,每次詢問的格式為:L, R,表示求S = A[L] + A[L+1] + ... + A[R]的值。若S 的值為0,輸出"YES",否則輸出"NO"。
Input 第1行:兩個整數N和M(1<=N, M <=100000)
第2行:N個空格分開的整數,表示陣列的各個元素,保證只含1和-1
接下來M行,每行兩個整數L,R(1 <=L <= R <=N),表示每個詢問的左右端點
Output 共M行,對每個詢問,若和為0,輸出"YES",否則輸出"NO" Sample Input
5 5Sample Output-1 1 -1 1 -1 1 1 2 3 3 5 2 5 1 5
NO YES NO YES NO
分析:第一眼看到了l,r,還以為是二分,然後仔細讀完題目,覺得好簡單,果斷開始模擬,交上去之後才發現
然後開始想怎麼節省時間,不可能再模擬了,此時我想到的居然是記憶化遞迴,扶額...好吧,我確實沒想到其他東西了,又不是搜尋,深搜超時改廣搜,於是去問老師,然後得解。
其實就是再另外找一個數組存和,舉個例子
陣列a來儲存那個陣列,s來存和,可以:
s[1]=a[1];
s[2]=s[1]+a[2];(前2數之和)
s[3]=s[2]+a[3];(前3數之和)
s[4]=s[3]+a[4];(前4數之和)
我們如果要求2~5,只用將s[5]-s[2-1]即可,s[5]-s[1]=a[1]+a[2]+a[3]+a[4]+a[5]-a[1]=a[2]+a[3]+a[4]+a[5]
是不是很神奇?所以只要學了知識,就能完成許多神奇的事情,知識改變命運 我是說了些什麼心靈雞湯麼
如果還沒有看懂的話,我們再舉個例子
我們如果要求3~6,只用將s[6]-s[3-1]即可,s[6]-s[2]=a[1]+a[2]+a[3]+a[4]+a[5]+a[6]-a[1]-a[2]=a[2]+a[3]+a[4]+a[5]+a[6]
那麼,程式碼奉上:(就不寫註釋啦,前面的看懂之後應該分分鐘秒殺啦 //分分鐘還秒殺?
#include<cstdio>
#include<cmath>
int n,m,num[100005],s[100005],l,r;
int main()
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
for(int i=1;i<=n;i++)
s[i]=s[i-1]+num[i];
for(int i=1;i<=m;i++)
{
scanf("%d %d",&l,&r);
if(s[r]-s[l-1]) printf("NO\n");
else printf("YES\n");
}
}
相關推薦
陣列上的詢問【字首和】
Description給出一個有N個元素的陣列A,元素的值要麼是1,要麼是-1。 給出M次詢問,每次詢問的格式為:L, R,表示求S = A[L] + A[L+1] + ... + A[R]的值。若S 的值為0,輸出"YES",否則輸出"NO"。 Input 第1行:兩
【區間偶數異或和】【好題】【離線】【樹狀陣列】【字首和】【前驅思想】
【連結】 http://hznu.club/OJ/problem.php?cid=1227&pid=2 【題意】 求區間出現偶數次的數的異或和 【思路】 首先,沒有修改,可以離線查詢,減少複雜度。 其次,我們容易知道的是:區間出現奇數次的數的異或和,即為區間異或和。
Luogu P3941 入陣曲【字首和】By cellur925
題目傳送門 題目大意:給你一個\(n\)*\(m\)的矩陣,每個位置都有一個數,求有多少不同的子矩陣使得矩陣內所有數的和是\(k\)的倍數。 資料範圍給的非常友好233,期望得到的暴力分:75分。前12個點可以用\(O(n^4)\)演算法水過,對於\(<=400\)的有特殊性質2的資料,我們還可
【HDU6345】子串查詢【字首和】【線段樹】
題目大意: 題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=6345 求給定串 l l
nssl1186-字串數量【字首和】
正題 題目大意 長度為n的字串,有q個詢問,求[l∼r][l\sim r][l∼r]這個區間的最小子串出現次數。 解題思路 這個就是一道坑題 我們可以發現如果有一個長度為2的子串,那麼這個子串前面那
【11.2校內測試】【狀壓】【矩陣字首和】【樹狀陣列逆序對(題意轉換)】
Solution 簽到水題,直接狀壓列舉所有情況算出答案即可。 Code #include<bits/stdc++.h> #define LL long long using namespace std; inline LL read() { LL x =
Karen and Coffee 【CodeForces - 816B】【字首和思想】
題目連結 很好的一道題,剛看到這道題的時候,我們看法各不一,敲了線段樹、還有敲了個狀壓DP的,但是最後T在第9發,然後想到了其他的做法,真的很有意思的字首思想。 看看程式碼吧,會很驚喜的: #include <iostream> #incl
[JZOJ5952] 凱旋而歸 ([BZOJ 5092]【Lydsy1711月賽】分割序列)【高維字首和】【DP】
Description 對於一個長度為m的序列a,記 f ( a
【51nod 1065】【貪心+字首和】最小正子段和【最小正子串和】
思路: 可以參見夾克老爺的回覆的那個帖子:http://bbs.csdn.net/topics/370106383。 對於這類連續序列的問題可以先求出字首和,對於每個位置求某個位置到當前位置和大於1
【字首和 && 子矩陣的中位數】Gym
Step1 Problem: 有一個 n * m 的矩陣,每個位置都有一個值 a[i][j]. 有 q 個詢問。 對於每個詢問給你一個子矩陣: 子矩陣的 左上角(x1, y1),右下角(x2, y2),求該子矩陣的中位數。 中位數:所有
【Code Forces 320E】【三分+字首和】Weakness and Poorness 最大的區間和的絕對值儘可能小
【題意】 給你一個整數數列a1~an 找到一個實數x,使得a1-x,a2-x,…,an-x的weakness儘可能小 一個數列的weakness,是這個數列所有區間poorness的最大值 一個區間的poorness,是這個區間內所有元素和的絕對值
【離散+二維字首和】Gym - 101991D - Dull Chocolates
題目連結<https://cn.vjudge.net/problem/2049045/origin> 題意: 在一個N*M的棋盤中,有K個白子,其他的都是黑子。問有多少個字首和矩陣包含奇數個白子,多少個包含偶數個白子。 (1≤N,M≤1e9,1≤K≤1e3).
【高維字首和】SPOJ(TLE)[Time Limit Exceeded]題解
題目概述 題目名稱要不要這麼奇葩而且和題面沒有半毛錢關係啊,我上交題目都以為自己TLE了。 給出 nn 個數 cici ,現在需要構造 aiai 使得: aimodci>0aimodci&
Java實現排序的方法--List,陣列排序。【自定義】繼承Comparable和Comparator
(一)list和陣列①List預設排序程式碼:public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("阿a裡 "
3781. 小B的詢問【莫隊】
turn 其中 包含 output sigma 共有m個 pre stream tdi Description 小B有一個序列,包含N個1~K之間的整數。他一共有M個詢問,每個詢問給定一個區間[L..R],求Sigma(c(i)^2)的值,其中i的值從1到K,其中c(
洛谷 P2709 小B的詢問 【莫隊】
加油 ide close turn sample getch pac ID sed 洛谷 P2709 小B的詢問 題目描述 小B有一個序列,包含N個1~K之間的整數。他一共有M個詢問,每個詢問給定一個區間[L..R],求Sigma(c(i)^2)的值,其中i的值從1到
題解 P2068 【統計和】
這是一道單點修改,區間查詢的線段樹。 需要實現的操作有三個:建樹,更新與查詢。 首先,線段樹用結構體維護,如下: 1 struct node { 2 int l, r; 3 int val; 4 } tree[maxn * 4]; 其中l, r表示節點所表示區
elementui 上傳圖片到七牛雲上面去,可以多張上傳 【簡單/有效】
目的:elementui 上傳多張圖片到七牛雲上面去 第一步:效果說明 七牛雲顯示: 第二步:程式碼 2-1、這裡會用到兩個小東西,一個是 後臺獲取 token,一個是獲取一個隨機不重複字串(uuid用來做上傳檔案的名稱) token 獲取:https
App端【待現場核查的申請】設計項列表介面上的上的【經營者資訊】按鈕調【經營者設計項】的編輯介面,並且能夠檢視選中的待現場核查的申請對應的經營者資訊
//前端的程式碼 function(button, e) //App端【經營者資訊】設計項編輯介面上的上的【經營者資訊】按鈕調【法人負責人情況】的編輯介面,並且能夠檢視選中的經營者的申請對應的法人負責人情況 { try{ var m
題解 luogu P2068 【統計和】
小水題 話說rayment大佬噓寒問暖兩天,差點教會我怎麼用splay求區間和。這題我差點就下狠手使用splay了。 線段樹1的退化版,change區間變成了change一個數,延遲標記?不存在! 所以我們只需要簡單建一棵線段樹,然後輕鬆模擬就好了。建樹其實只需要將樹的區間搞出來