제출 #79368

#제출 시각아이디문제언어결과실행 시간메모리
79368gs14004모임들 (IOI18_meetings)C++17
17 / 100
83 ms8148 KiB
#include <bits/stdc++.h>
#include "meetings.h"
using namespace std;
using pi = pair<int, int>;
const int MAXN = 100005;
const int MAXT = 270005;
 
struct node{
	int len, le, ri, opt;
	node operator+(const node &n)const{
		node ret;
		ret.len = len + n.len;
		ret.le = (le == len ? (len + n.le) : le);
		ret.ri = (n.ri == n.len ? (ri + n.len) : n.ri);
		ret.opt = max({opt, n.opt, ri + n.le});
		return ret;
	}
};

struct seg{
	node tree[MAXT];
	int lim;
	void init(vector<int> &V){
		fill(tree, tree + MAXT, (node){0, 0, 0, 0});
		for(lim = 1; lim <= V.size(); lim <<= 1);
		for(int i=0; i<V.size(); i++){
			tree[i + lim].len = 1;
			if(V[i] == 1) tree[i + lim] = (node){1, 1, 1, 1};
		}
		for(int i=lim-1; i; i--) tree[i] = tree[2*i] + tree[2*i+1];
	}
	int query(int s, int e){
		s += lim;
		e += lim;
		node retl = {0, 0, 0, 0};
		node retr = {0, 0, 0, 0};
		while(s < e){
			if(s % 2 == 1) retl = retl + tree[s++];
			if(e % 2 == 0) retr = tree[e--] + retr;
			s >>= 1;
			e >>= 1;
		}
		if(s == e) retl = retl + tree[s];
		return (retl + retr).opt;
	}
}seg;

vector<long long> minimum_costs(vector<int> H, vector<int> L, vector<int> R){
	int n = H.size();
	int q = L.size();
	seg.init(H);
	vector<long long> ret(q);
	for(int i=0; i<q; i++){
		ret[i] = 2 * (R[i] - L[i] + 1) - seg.query(L[i], R[i]);
	}
	return ret;
}

컴파일 시 표준 에러 (stderr) 메시지

meetings.cpp: In member function 'void seg::init(std::vector<int>&)':
meetings.cpp:25:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(lim = 1; lim <= V.size(); lim <<= 1);
                ~~~~^~~~~~~~~~~
meetings.cpp:26:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i=0; i<V.size(); i++){
                ~^~~~~~~~~
meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:49:6: warning: unused variable 'n' [-Wunused-variable]
  int n = H.size();
      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...