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,每次有任务的时候,总会有一批编号连在一起人请战 ...
随机推荐
- UBoot添加命令的方法
1. 具体实现步骤 ① 在./common文件夹下新建cmd_led.c,并在此文件中添加如下内容 #include <common.h> #include <command.h&g ...
- c语言中有关0和1的运算问题
/*有关0和1 的总结 最近做题总是混淆0 和 1 对于/ 和 %运算时候的结果怎么算 所以就上机试验了一番 结论: c语言中,0/任何数都为0 0%任何数都为0 1/任何数都为0 1%任何数都余1 ...
- java——修改txt文件中某一行的内容
今天无意间看到java.io中有一个类:RandomAccessFile,可以在文件的任意位置进行读写操作,想到我之前写的一个小项目,想在txt中修改某一行的内容,都是从头遍历txt文件,修改这一行的 ...
- python django 基本测试
http://www.runoob.com/django/django-model.html django-admin startapp TestModel /models.py from djang ...
- 那些经历过的Bug Unity的Invoke方法
有一个游戏对象,上面挂着 3 个脚本,如下: using System.Collections; using System.Collections.Generic; using UnityEngine ...
- (转)linux应用之test命令详细解析
linux应用之test命令详细解析 原文:https://www.cnblogs.com/tankblog/p/6160808.html test命令用法. 功能:检查文件和比较值 1)判断表达式 ...
- express --- session详解
之前一直做前端相关的工作,所以不太清楚session,也没有主动了解,最近在学node,对session的认识又有所加深,故总结之. 注: 关于session的一些配置问题,可以看这里. 第一部分: ...
- ArrayList代码分析
集合算是java中最常用的部分了,阅读该部分jdk代码可以让我们更加清楚的了解其实现原理,在使用时也能心中有数,有利于写出高质量的代码. ArrayList 底层数组实现,初始长度10,超过长度后的自 ...
- iOS 时间戳和时间互换,计算两日期相隔天数
/* *获取当前系统时间的时间戳 */ +(NSInteger)getNowTimestamp; /** * 获取当前时间 */ + (NSString *)getNowTimeTampF ...
- struts2分页实现
1.定义一个page类,里面包括每一个的数量,当前页码,总记录数,等 2.将page对象传入dao中,dao输出分页查询好的数据.返回到action中,action放到request中,jsp从req ...