前缀和
lcxdz
这个作者很懒,什么都没留下…
展开
-
牛牛的方格图 (思维 差分 前缀和
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e3+9,M=1e6+9;typedef pair<int,int> pii;vector<pii>v[M];int res[N][N];void di(int x1,int y1,int x2,int y2){ res[x1][y1]++; res[x2+1][y2+1]++; res[x1][y2+1]--;原创 2022-04-10 17:03:06 · 242 阅读 · 0 评论 -
1230. K倍区间 (前缀和 trick
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e5+9;#define int long longint nk[N];signed main(){ int n,k,ans=0,sum=0; cin>>n>>k; //两个相对的前缀和可以组成一个k倍区间 for(int i=1;i<=n;i++){ int x; c原创 2022-03-31 14:09:45 · 101 阅读 · 0 评论 -
99. 激光炸弹 (二维前缀和 trick
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=6e3+9;int sum[N][N];int main(){ std::ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); int n,r; cin>>n>>r; r=min(5001,r); for(int i=1;i<=n;i++){原创 2022-03-31 13:44:42 · 178 阅读 · 0 评论 -
795. 前缀和 (模板
添加链接描述输入一个长度为 n 的整数序列。接下来再输入 m 个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l 个数到第 r 个数的和。输入格式第一行包含两个整数 n 和 m。第二行包含 n 个整数,表示整数数列。接下来 m 行,每行包含两个整数 l 和 r,表示一个询问的区间范围。输出格式共 m 行,每行输出一个询问的结果。数据范围1≤l≤r≤n,1≤n,m≤100000,−1000≤数列中元素的值≤1000输入样例:5 32 1 3 6 41 21原创 2022-03-24 11:24:27 · 312 阅读 · 0 评论 -
瓜瓜选妃 (二维差分 前缀 二分
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=510,M=1e5+9;int dp[N][N];int sum[N][N],di[N][N];struct node { int a,b,c,d;}t[M];int n,m,q;bool check(int mid){ memset(di,0,sizeof di); for(int i=1;i<=mid;i++){原创 2022-03-20 19:53:05 · 196 阅读 · 0 评论 -
T229475 F1. 生活在树上(easy version) (异或前缀和 思维 bfs
添加链接描述从一点到两个a,b直接的路程异或公共路径会被异或相消所以本质就是路径上的点异或前缀,从一点开始得到每个点的异或前缀,从当前路径开始又可以推断出相同路径相消,所以本质就是前缀和查询#include<bits/stdc++.h>using namespace std;#define int unsigned long long//2的64次方 注意开ullconst int N=5e5+9;int e[N],ne[N],h[N],w[N],idx;void add(int原创 2022-03-12 19:43:16 · 523 阅读 · 0 评论 -
兔崽小孩 (前缀和 二分 排序
添加链接描述先把入睡时间排序 二分找到可以入睡的最小位置 前缀和的到睡眠的所有时间#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 9;typedef long long ll;map<int,bool> mp;int arr[N];int num[N],sum[N];int main(){ int n,q; cin>>n>>q; fo原创 2022-02-11 15:21:57 · 363 阅读 · 0 评论 -
蓝彗星 (差分与前缀和
添加链接描述#include<bits/stdc++.h>using namespace std;map<char,int>mp;#define int long longtypedef long long ll;ll ans;const int N=2e5+5;int num[N];int arr[N];signed main(){ int n,t; cin>>n>>t; string s; cin>原创 2022-02-09 16:49:48 · 242 阅读 · 0 评论 -
储物点的距离 (前缀和 思维 mod优化
添加链接描述前往不要忘记cout<<(ans+mod)%mod<<endl;#include<bits/stdc++.h>using namespace std;const int N=2e5+9;typedef long long ll;#define int long longll dist[N],num[N],sum[N];int mod=1000000007;signed main(){ int n,m; scanf("%原创 2022-01-25 23:31:25 · 154 阅读 · 0 评论 -
值周 (区间合并 差分
添加链接描述区间合并 首先按区间将按左端点从小到大排序然后标记第一个区间左右端点为a和b然后从第二个区间遍历 如果当前区间左端点小于等于a 说明包含在a到b中间 则判断是否需要扩大b 取max如果当前区间左端点大于a 说明区间不包含 减去当前a到b的所有点 要+1记录当前a和b为左右端点#include<bits/stdc++.h>using namespace std;const int N=1e6+9;typedef pair<int ,int> p原创 2022-01-20 21:26:51 · 383 阅读 · 0 评论 -
漂亮数 (欧拉筛 快读
添加链接描述把素数筛出来然后相乘取前缀和#include<bits/stdc++.h>using namespace std;const int N=1e8+9;int vis[N],p[N],tot,sum[N];bool book[N];typedef long long ll;inline ll read(){ ll num=0,neg=1;char c=getchar(); while(!isdigit(c)){if(c=='-')neg=-1;c=get原创 2022-01-09 23:53:20 · 119 阅读 · 0 评论 -
厌风风不定,风起花萧索。(前缀和 map
添加链接描述用map存储每个字符串标记然后用二维数组求前缀和#include<bits/stdc++.h>using namespace std;#define int long long typedef long long ll;const int N=15,M=1e3+9;string ch;typedef pair<string,ll> pii;int sum[M][M];map<string,int> mp;int cnt;signed m原创 2021-12-27 13:25:17 · 88 阅读 · 0 评论 -
沙之家的塔塔露有事寻求冒险者 (位运算 前缀和 差分
添加链接描述首先考虑位运算或的性质可以发现当x的当前位0时则所有l~r的当前位都为0所以要判断当前位采用差分 d【35】【N】前缀和后判断是否当前位为1则舍去 否则1<<i遍历30位得到每个数#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=3e6+9;#define debug() ll d[35][N],sum[N];void die(int l,int原创 2021-12-22 13:38:39 · 133 阅读 · 0 评论 -
羊工八刀 (前缀和 思维
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e6+9;typedef long long ll;#define int long longchar arr[N];int sum_1[N],sum_2[N];int num[N];ll mod=1e9+7;signed main(){ int T; scanf("%d",&T); while(T--){原创 2021-12-22 12:39:35 · 136 阅读 · 0 评论 -
T216909 小卡与质数2 (前缀和 欧拉筛
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2e6+9;int v[N],p[N];int m;void get(){ for(int i=2;i<=2e6;i++){ if(v[i]==0)v[i]=i,p[++m]=i; for(int j=1;j<=m;j++){ if(p[j]>2e6/i||p[j]>v[i])原创 2021-12-19 21:19:49 · 982 阅读 · 1 评论 -
B. Cutting (思维 前缀和 堆
添加链接描述其实题意看懂就好写了 将所有前缀为0的段的值求出放入小根堆中,判断是否可取,#include<bits/stdc++.h>using namespace std;const int N=110;int sum[N],arr[N];priority_queue<int,vector<int>,greater<int>> q;int n,mx;int solve(){ int ans=0; while(q.size()原创 2021-11-17 19:38:09 · 143 阅读 · 0 评论 -
拜俺拜俺 (前缀和
添加链接描述如果i出现过相同下标表示这段区间里a与b的个数相同注意这个mpsum+1,导致我当时脑子没转过弯#include<bits/stdc++.h>using namespace std;const int N=1e4+9;char s[N];bool solve(int n,int x){ map<int,int>mp; int sum=0; for(int i=1;i<=n;i++){ if(s[i]=='a')s原创 2021-11-16 20:31:46 · 59 阅读 · 0 评论 -
空调遥控 (单调队列 或者滑动窗口 前缀和
添加链接描述当然我学了下前缀和的做法也不错,o(n的做法,就是存储当前的温度个数,然后前缀和温度来判断是否在两倍的p间个数最多#include<bits/stdc++.h>using namespace std;const int N=1e6+9;char s[N];int dp[N];int mp[N];int sum[N];deque<int>qa;int main(){ // int T; // scanf("%d",&T);原创 2021-11-07 14:03:25 · 107 阅读 · 0 评论 -
B. Find the Spruce (模拟 前缀和
添加链接描述看到题目范围很小 可以考虑n^3暴力枚举 先用前缀和统计每行的树的*个数,然后从当前开始枚举k的高度然后统计树的个数#include<bits/stdc++.h>using namespace std;const int N=600;char s[N][N];typedef long long ll;void solve(){ int n,m; int sum[N][N]={}; scanf("%d%d",&n,&m);原创 2021-11-07 13:46:45 · 138 阅读 · 0 评论 -
C. Coin Rows (前缀和 思维
题目链接首先可以发现a只能走m步,然后看图可以发现a的路径将图分割成了一个第一行的后缀和第二行的前缀,所以我们可以先将第一行的前缀和求出,然后减去当前第一行的第i个数,与第二行的前缀和比较得到最大值,然后取mi的最小值记录,最后不断增加第二行的前缀和。#include<bits/stdc++.h>using namespace std;const int N=1e5+9;int arr[5][N];typedef long long ll;void solve(){ int原创 2021-11-05 19:13:53 · 215 阅读 · 0 评论 -
CF1476D Journey (递推 前缀和后缀
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=3e5+9;typedef long long ll;char s[N];int sum[N]={},sum_1[N]={};int main(){ int T; scanf("%d",&T); while(T--){ int n; memset(sum,0,sizeof sum); memse原创 2021-08-26 23:57:58 · 161 阅读 · 0 评论 -
P1083 [NOIP2012 提高组] 借教室 (二分 差分 前缀和
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=1e6+9;typedef long long ll;ll room[N];struct node { int n,s,t;}t[N];int n,m;ll sum[N],res[N];bool check(int mid){ memset(sum,0,sizeof sum); memset(res,0,sizeof res); for(int i原创 2021-08-22 23:36:13 · 116 阅读 · 0 评论 -
P1314 [NOIP2011 提高组] 聪明的质监员 (二分 前缀和
添加链接描述#include<bits/stdc++.h>using namespace std;typedef long long ll;typedef pair<int,int> pii;const int N=2e5+9;pii arr[N],query[N];int n,m;ll sum[N];ll s,res,ok;ll pre_n[N],pre_v[N];bool check(int mid0){ res=0; memset(pre_n,0原创 2021-08-22 23:02:50 · 119 阅读 · 0 评论 -
CF1474D Cleaning (思维 前缀 后缀 交换部分不影响全部
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2e5+9;int arr[N],b[N]={},c[N]={};int main(){ int T; scanf("%d",&T); while(T--){ memset(arr,0,sizeof arr); memset(b,0,sizeof b); memset(c,0,sizeof c); int n; scanf("%d"原创 2021-08-20 23:12:32 · 120 阅读 · 0 评论 -
CF1473D Program (前缀和 后缀和
添加链接描述#include<bits/stdc++.h>using namespace std;const int N=2e5+10,INF=0x3f3f3f3f;int arr[N],maxl[N]={},maxr[N]={};int minl[N]={},minr[N]={};int main(){ int T; scanf("%d",&T); while(T--){ int n,m; memset(maxl,0,sizeof maxl); memse原创 2021-08-19 23:07:23 · 181 阅读 · 0 评论 -
Acwing 802 (离散化 前缀和
区间和#include <map>#include <vector>#include <iostream>#include <algorithm>using namespace std;#define pii pair<int, int>const int inf = 1e9 + 5;vector<pii> a;map<int, int> mp;int main(){ int n, m;原创 2021-05-05 14:22:01 · 144 阅读 · 0 评论 -
poj 1050 To the max(前缀和 二维
添加链接描述先把每行的前缀和求出 然后三重循环 起始列 到终止列 求出每行的前缀和 若sum<0清空子矩阵 否则记录出现的最大值#include <cstdio>#include <cstring>#include <string>#include <cmath>#include <iostream>#include <algorithm>#include <vector>#include &l原创 2021-03-30 17:49:29 · 102 阅读 · 0 评论