답안 #142791

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
142791 2019-08-11T04:03:00 Z cheetose 역사적 조사 (JOI14_historical) C++11
40 / 100
4000 ms 8552 KB
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<vector>
#include<queue>
#include<bitset>
#include<string>
#include<stack>
#include<set>
#include<unordered_set>
#include<map>
#include<unordered_map>
#include<cstring>
#include<complex>
#include<cmath>
#include<iomanip>
#include<numeric>
#include<algorithm>
#include<list>
#include<functional>
#include<cassert>
#define mp make_pair
#define pb push_back
#define X first
#define Y second
#define y0 y12
#define y1 y22
#define INF 1987654321
#define PI 3.141592653589793238462643383279502884
#define fup(i,a,b,c) for(int (i)=(a);(i)<=(b);(i)+=(c))
#define fdn(i,a,b,c) for(int (i)=(a);(i)>=(b);(i)-=(c))
#define MEM0(a) memset((a),0,sizeof(a));
#define MEM_1(a) memset((a),-1,sizeof(a));
#define ALL(a) a.begin(),a.end()
#define SYNC ios_base::sync_with_stdio(false);cin.tie(0)
using namespace std;
typedef long long ll;
typedef long double ld;
typedef double db;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int, int> Pi;
typedef pair<ll, ll> Pll;
typedef pair<ld, ld> Pd;
typedef vector<int> Vi;
typedef vector<ll> Vll;
typedef vector<double> Vd;
typedef vector<Pi> VPi;
typedef vector<Pll> VPll;
typedef vector<Pd> VPd;
typedef tuple<int, int, int> iii;
typedef tuple<int,int,int,int> iiii;
typedef tuple<ll, ll, ll> LLL;
typedef vector<iii> Viii;
typedef vector<LLL> VLLL;
typedef complex<double> base;
const ll MOD = 1000000007;
ll POW(ll a, ll b, ll MMM = MOD) {ll ret=1; for(;b;b>>=1,a=(a*a)%MMM)if(b&1)ret=(ret*a)% MMM; return ret; }
ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
ll lcm(ll a, ll b) { if (a == 0 || b == 0)return a + b; return a*(b / gcd(a, b)); }
int dx[] = { 0,1,0,-1,1,1,-1,-1 }, dy[] = { 1,0,-1,0,1,-1,1,-1 };

int n,m,sz,N;
ll a[100000];
int cnt[1000001];
ll ans[100000];
struct query {
	int l, r, i;
	query() :query(0, 0, 0) {}
	query(int L, int R, int I) :l(L), r(R), i(I) {}
	bool operator < (const query& Q)
	{
		int lg = r / sz, rg = Q.r / sz;
		return lg == rg ? l < Q.l : lg < rg;
	}
}q[100000];
Vll vv;

ll tree[262144];
void upd(int node, int S, int E, int k, int dif)
{
	tree[node] += dif;
	if (S == E)return;
	if (k <= (S + E) / 2)upd(node * 2, S, (S + E) / 2, k, dif);
	else upd(node * 2 + 1, (S + E) / 2 + 1, E, k, dif);
	tree[node]=max(tree[node*2],tree[node*2+1]);
}

ll find(int node, int S, int E, int i, int j)
{
	if (i > E || j < S)return 0;
	if (i <= S && j >= E)return tree[node];
	return max(find(node * 2, S, (S + E) / 2, i, j), find(node * 2 + 1, (S + E) / 2 + 1, E, i, j));
}
void add(int x)
{
	upd(1,0,N-1,x,vv[x]);
}
void erase(int x)
{
	upd(1,0,N-1,x,-vv[x]);
}
int main() {
	scanf("%d%d",&n,&m);
	sz = sqrt(n);
	fup(i, 0, n - 1, 1)
	{
		scanf("%lld", a + i);
		vv.pb(a[i]);
	}
	sort(ALL(vv));
	vv.resize(unique(ALL(vv))-vv.begin());
	fup(i,0,n-1,1)a[i]=lower_bound(ALL(vv),a[i])-vv.begin();
	N=vv.size();
	fup(i, 0, m - 1, 1)
	{
		int L, R;
		scanf("%d%d", &L, &R);
		q[i] = query(L-1, R-1, i);
	}
	sort(q, q + m);
	int L = 0, R = 0;
	add(a[0]);
	for (int i = 0; i < m; i++)
	{
		int nl = q[i].l, nr = q[i].r;
		if (nr > R)
		{
			for (int k = R + 1; k <= nr; k++)
				add(a[k]);
		}
		if (nr<R)
		{
			for (int k = R; k > nr; k--)
				erase(a[k]);
		}
		if (nl < L)
		{
			for (int k = L - 1; k >= nl; k--)
				add(a[k]);
		}
		if (nl > L)
		{
			for (int k = L; k < nl; k++)
				erase(a[k]);
		}
		ans[q[i].i] = tree[1];
		L = nl, R = nr;
	}
	fup(i, 0, m - 1, 1)printf("%lld\n", ans[i]);
}

Compilation message

historic.cpp: In function 'int main()':
historic.cpp:104:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&m);
  ~~~~~^~~~~~~~~~~~~~
historic.cpp:108:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%lld", a + i);
   ~~~~~^~~~~~~~~~~~~~~
historic.cpp:118:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d%d", &L, &R);
   ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1528 KB Output is correct
2 Correct 3 ms 1528 KB Output is correct
3 Correct 4 ms 1528 KB Output is correct
4 Correct 6 ms 1528 KB Output is correct
5 Correct 4 ms 1528 KB Output is correct
6 Correct 4 ms 1528 KB Output is correct
7 Correct 3 ms 1528 KB Output is correct
8 Correct 3 ms 1528 KB Output is correct
9 Correct 4 ms 1528 KB Output is correct
10 Correct 4 ms 1584 KB Output is correct
11 Correct 3 ms 1576 KB Output is correct
12 Correct 4 ms 1528 KB Output is correct
13 Correct 3 ms 1528 KB Output is correct
14 Correct 4 ms 1528 KB Output is correct
15 Correct 4 ms 1544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1528 KB Output is correct
2 Correct 4 ms 1528 KB Output is correct
3 Correct 6 ms 1576 KB Output is correct
4 Correct 11 ms 1528 KB Output is correct
5 Correct 26 ms 1656 KB Output is correct
6 Correct 41 ms 1784 KB Output is correct
7 Correct 47 ms 1784 KB Output is correct
8 Correct 30 ms 1784 KB Output is correct
9 Correct 31 ms 1784 KB Output is correct
10 Correct 61 ms 1784 KB Output is correct
11 Correct 61 ms 1984 KB Output is correct
12 Correct 60 ms 1912 KB Output is correct
13 Correct 61 ms 1908 KB Output is correct
14 Correct 63 ms 1912 KB Output is correct
15 Correct 59 ms 1912 KB Output is correct
16 Correct 35 ms 1968 KB Output is correct
17 Correct 15 ms 1912 KB Output is correct
18 Correct 57 ms 1912 KB Output is correct
19 Correct 61 ms 1824 KB Output is correct
20 Correct 66 ms 1912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 1656 KB Output is correct
2 Correct 3 ms 1528 KB Output is correct
3 Correct 3 ms 1528 KB Output is correct
4 Correct 4 ms 1528 KB Output is correct
5 Correct 4 ms 1656 KB Output is correct
6 Correct 5 ms 1656 KB Output is correct
7 Correct 7 ms 1784 KB Output is correct
8 Correct 11 ms 2040 KB Output is correct
9 Correct 20 ms 2548 KB Output is correct
10 Correct 13 ms 2676 KB Output is correct
11 Correct 85 ms 6124 KB Output is correct
12 Correct 51 ms 3952 KB Output is correct
13 Correct 80 ms 4844 KB Output is correct
14 Correct 114 ms 6632 KB Output is correct
15 Correct 152 ms 8144 KB Output is correct
16 Correct 104 ms 7660 KB Output is correct
17 Correct 48 ms 4204 KB Output is correct
18 Correct 77 ms 6252 KB Output is correct
19 Correct 91 ms 8552 KB Output is correct
20 Correct 55 ms 6632 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 96 ms 2124 KB Output is correct
2 Correct 403 ms 2660 KB Output is correct
3 Correct 945 ms 3188 KB Output is correct
4 Correct 1586 ms 3952 KB Output is correct
5 Correct 2290 ms 4464 KB Output is correct
6 Correct 2695 ms 5100 KB Output is correct
7 Correct 2509 ms 5740 KB Output is correct
8 Correct 1746 ms 6284 KB Output is correct
9 Correct 1165 ms 7024 KB Output is correct
10 Correct 404 ms 6760 KB Output is correct
11 Correct 1647 ms 6900 KB Output is correct
12 Execution timed out 4049 ms 7016 KB Time limit exceeded
13 Halted 0 ms 0 KB -