NYOJ 士兵杀敌(1~5)
士兵杀敌(1): http://acm.nyist.net/JudgeOnline/problem.php?pid=108
分析:前缀和
#include <bits/stdc++.h> using namespace std; int a[];
int sum[]; int main()
{
int n,m;
scanf("%d%d",&n,&m); sum[] = ;
for(int i=;i<=n;i++) {
scanf("%d",&a[i]);
sum[i] = sum[i-] + a[i];
} while(m--) {
int m,n;
scanf("%d%d",&m,&n);
if(m>n)
swap(m,n);
printf("%d\n",sum[n]-sum[m-]); } return ;
}
士兵杀敌(2):http://acm.nyist.net/JudgeOnline/problem.php?pid=116
分析:树状数组(单点更新,区间求和)
#include <bits/stdc++.h> using namespace std; const int maxn = +; int C[maxn];
int n,m; int lowbit(int x) {
return x&-x;
} //A[1] + A[2] + ... + A[x]
int sum(int x) {
int ret = ;
while(x>) {
ret +=C[x];
x-=lowbit(x);
}
return ret;
} //A[x] +=d;
void add(int x,int d) {
while(x<=n) {
C[x] +=d;
x+=lowbit(x);
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
int x;
scanf("%d",&x);
add(i,x);
} char cmd[];
for(int i=;i<m;i++) {
scanf("%s",cmd);
if(cmd[]=='A')
{
int x,d;
scanf("%d%d",&x,&d);
add(x,d);
}
else {
int u,v;
scanf("%d%d",&u,&v);
printf("%d\n",sum(v)-sum(u-));
}
} return ;
}
士兵杀敌(3):http://acm.nyist.net/JudgeOnline/problem.php?pid=119
分析:RMQ
#include <bits/stdc++.h>
using namespace std;
const int maxn = ;
struct RMQ {
int dmin[maxn][];
int dmax[maxn][];
void RMQ_init(const vector<int>& A) {
int n = A.size();
for(int i=;i<n;i++)
{
dmin[i][] = A[i];
dmax[i][] = A[i];
}
for(int j=;(<<j)<=n;j++) {
for(int i=;i+(<<j)-<n;i++) {
dmin[i][j] = min(dmin[i][j-],dmin[i+(<<(j-))][j-]);
dmax[i][j] = max(dmax[i][j-],dmax[i+(<<(j-))][j-]);
}
}
}
int RMQ_min(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
return min(dmin[L][k],dmin[R-(<<k)+][k]);
}
int RMQ_max(int L,int R) {
int k = ;
while((<<(k+))<=R-L+)
k++;
int ans = max(dmax[L][k],dmax[R-(<<k)+][k]);
return ans;
}
}sol;
int main()
{
int n,m;
scanf("%d%d",&n,&m);
vector<int> v;
for(int i=;i<n;i++) {
int x;
scanf("%d",&x);
v.push_back(x);
}
sol.RMQ_init(v);
for(int i=;i<m;i++) {
int l,r;
scanf("%d%d",&l,&r);
l--;r--;
printf("%d\n",sol.RMQ_max(l,r)-sol.RMQ_min(l,r));
}
return ;
}
士兵杀敌(4):http://acm.nyist.net/JudgeOnline/problem.php?pid=123
分析:区间更新,单点查询;
线段树超时,要优化线段树,线段树这么高级,我可不会改板子啊 (*^__^*)
解法:利用树状数组的逆过程!!!
add的时候,就把路上的C[x] 全都加上;(add(qR,v);add(qL-1,v))
询问的时候,往右上走,看看总共有多少给这个点产生了影响;
#include <bits/stdc++.h> using namespace std; const int maxn = +;
int C[maxn];
int m,t;
int lowbit(int x)
{
return x&-x;
} void add(int star,int num) {
while(star>) {
C[star]+=num;
star-=lowbit(star);
}
} int sum(int star) {
int sum = ;
while(star<=m) {
sum+=C[star];
star+=lowbit(star);
}
return sum;
} int main()
{
scanf("%d%d",&t,&m);
while(t--) {
char cmd[];
scanf("%s",cmd);
if(cmd[]=='A') {
int u,v,c;
scanf("%d%d%d",&u,&v,&c);
add(v,c);
add(u-,-c);
}
else {
int pos;
scanf("%d",&pos);
printf("%d\n",sum(pos));
}
} return ;
}
士兵杀敌(5):http://acm.nyist.net/JudgeOnline/problem.php?pid=228
分析:区间更新,线段查询;
线段树又超时了 (ノへ ̄、)
解法:巧用数组,记录下来每个区间的更新的起点,和结束的起点,然后累加计算出正确数组;
再求一个前缀和;
/*
#include <bits/stdc++.h> using namespace std; const int maxnode = 1000001<<2;
int _min,_max,_sum;
int qL,qR,v; struct IntervalTree
{
int sumv[maxnode], minv[maxnode], maxv[maxnode], addv[maxnode];
void maintain(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
sumv[o] = minv[o] = maxv[o] = 0;
if(R > L)
{
sumv[o] = sumv[lc] + sumv[rc];
minv[o] = min(minv[lc], minv[rc]);
maxv[o] = max(maxv[lc], maxv[rc]);
}
if(addv[o])
{
minv[o] += addv[o];
maxv[o] += addv[o];
sumv[o] += addv[o] * (R-L+1);
}
} void update(int o, int L, int R)
{
int lc = o*2, rc = o*2+1;
if(qL <= L && qR >= R)
{
addv[o] += v;
}
else
{
int M = L + (R-L)/2;
if(qL <= M) update(lc, L, M);
if(qR > M) update(rc, M+1, R);
}
maintain(o, L, R);
} void query(int o, int L, int R, int add)
{
if(qL <= L && qR >= R)
{
_sum += (sumv[o] + add * (R-L+1))%10003;
_min = min(_min, minv[o] + add);
_max = max(_max, maxv[o] + add);
}
else
{
int M = L + (R-L)/2;
if(qL <= M) query(o*2, L, M, add + addv[o]);
if(qR > M) query(o*2+1, M+1, R, add + addv[o]);
}
} }tree; int main()
{
int n,c,q;
scanf("%d%d%d",&n,&c,&q);
while(c--) {
scanf("%d%d%d",&qL,&qR,&v);
tree.update(1,1,n);
} while(q--) {
_sum = 0;
scanf("%d%d",&qL,&qR);
tree.query(1,1,n,0);
printf("%d\n",_sum);
} return 0;
}
*/ #include <bits/stdc++.h> using namespace std; const int maxn = ;
int num[maxn]; int main()
{
int n,c,q;
memset(num,,sizeof(num));
scanf("%d%d%d",&n,&c,&q);
for(int i=;i<c;i++) {
int l,r,v;
scanf("%d%d%d",&l,&r,&v);
num[l]+=v;
num[r+]-=v;
} for(int i=;i<=n;i++) {
num[i]+=num[i-];
} for(int i=;i<=n;i++) {
num[i]=(num[i]+num[i-])%;
}
while(q--) {
int l,r;
scanf("%d%d",&l,&r);
printf("%d\n",(num[r]-num[l-]+)%);
} return ;
}
NYOJ 士兵杀敌(1~5)的更多相关文章
- NYOJ 士兵杀敌(三)
描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌 ...
- NYOJ 119 士兵杀敌(三) RMQ ST
NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlog ...
- NYOJ 116 士兵杀敌 (线段树,区间和)
题目链接:NYOJ 116 士兵杀敌 士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描写叙述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的 ...
- nyoj 108 士兵杀敌(一)
点击打开链接 士兵杀敌(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师, ...
- NYOJ 123 士兵杀敌4-树状数组的插线求点
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编 ...
- nyoj 119 士兵杀敌(三)(RMQ)
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...
- nyoj 119 士兵杀敌(三)【线段树区间最大值最小值差】
士兵杀敌(三) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进 ...
- nyoj 116 士兵杀敌(二)【线段树单点更新+求和】
士兵杀敌(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常 ...
- nyoj 123 士兵杀敌(四) 树状数组【单点查询+区间修改】
士兵杀敌(四) 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战 ...
随机推荐
- asp.net AD 域验证
1.获取环境变量 string strAuthUser = request.ServerVariables["AUTH_USER"] 以上这行代码是用来获取当前用户的登录名 2.I ...
- 匿名类与lambda区别
第一种是继承Thread, 重写了Thread.run() getClass()返回的是匿名类 java.long.Thread$1 第二种是lambda, 重写了Runnable.run() ...
- jconsole如何查看
https://www.jdon.com/idea/jvm-gc.html 场景: https://www.cnblogs.com/yszzu/p/9648579.html 查看大对象到底占用多 ...
- java——arr == null || arr.length == 0
这两者是不同的: arr == null; int[] arr = null; arr.length == 0; int[] arr =new int[0];
- Mockjs详细使用说明
Mock.js 是一款前端开发中拦截Ajax请求再生成随机数据响应的工具.可以用来模拟服务器响应. 优点是非常简单方便, 无侵入性, 基本覆盖常用的接口数据类型. 在我们的生产实际中,后端的接口往往是 ...
- Access restriction: The type Base64 is not accessible due to restriction on
java build path>把libraries中的JRE System Library删除重新导入.
- Mybatis学习笔记7 - select查询的相关属性使用
1.当接口的返回类型是集合List时,resultType要写集合中元素的类型 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean ...
- Mybatis学习笔记5 - 参数处理
1.单个参数:mybatis不会做特殊处理,#{参数名}:取出参数值. 2.多个参数:mybatis会做特殊处理. 多个参数会被封装成 一个map, key:param1...paramN,或者参数的 ...
- mysql 死锁解决办法
查询表的时候,发现一圈圈转啊转,就是不出来数据,猜测表被锁住 解决办法 : mysql> show processlist ; mysql> kill 4; 说明 : 4为 i ...
- numpy初用
import numpy as np for k,v in stat.iteritems(): print k v.sort() #v = v[len(v)*3/100:len ...