답안 #48787

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
48787 2018-05-18T18:01:34 Z Pajaraja 운세 보기 2 (JOI14_fortune_telling2) C++17
35 / 100
2000 ms 69728 KB
#include <bits/stdc++.h>
#define MAXN 1000007
using namespace std;
map<int,int> m;
vector<int> zh,aq[MAXN];
int a[2][MAXN],t[MAXN],seg[4*MAXN],bit[4*MAXN],lf[MAXN];
void upd(int l,int r,int v,int val,int ind)
{
	if(l==r) {seg[ind]=val; return;}
	int s=(l+r)/2;
	if(s>=v) upd(l,s,v,val,2*ind);
	else upd(s+1,r,v,val,2*ind+1);
	seg[ind]=max(seg[2*ind],seg[2*ind+1]);
}
int nmax(int l,int r,int lt,int rt,int ind)
{
	if(l>r) return 0;
	if(l>=lt  && r<=rt) return seg[ind];
	if(r<lt || l>rt) return 0;
	int s=(l+r)/2;
	return max(nmax(l,s,lt,rt,2*ind),nmax(s+1,r,lt,rt,2*ind+1));
}
void updf(int ind) {for(int i=ind;i<=zh.size();i+=(i&-i)) bit[i]++;}
int fval(int ind) 
{
	int sol=0;
	for(int i=ind;i>0;i-=(i&-i)) sol+=bit[i];
	return sol;
}
int main()
{
	int n,k;
	long long sol=0;
	scanf("%d%d",&n,&k);
	for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
	for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
	sort(zh.begin(),zh.end());
	int sz=zh.size();
	for(int i=0;i<zh.size();i++) m[zh[i]]=i;
	for(int i=1;i<=k;i++) upd(0,sz,m[t[i]],i,1);
	for(int i=0;i<n;i++) lf[i]=nmax(0,sz,m[min(a[0][i],a[1][i])],m[max(a[0][i],a[1][i])]-1,1);
	for(int i=0;i<n;i++) aq[lf[i]].push_back(i);
	for(int i=k;i>=1;i--)
	{
		updf(m[t[i]]+1);
		for(int j=0;j<aq[i].size();j++)
		{
			int b=min(a[0][aq[i][j]],a[1][aq[i][j]]),c=max(a[0][aq[i][j]],a[1][aq[i][j]]);
			if((fval(sz)-fval(m[c]))%2==0) sol+=c;
			else sol+=b; 
		}
	}
	for(int j=0;j<aq[0].size();j++)
	{
		int b=a[0][aq[0][j]],c=a[1][aq[0][j]];
		if((fval(sz)-fval(m[c]))%2==0) sol+=b;
		else sol+=c;
	}
	printf("%lld",sol);
}

Compilation message

fortune_telling2.cpp: In function 'void updf(int)':
fortune_telling2.cpp:23:36: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
 void updf(int ind) {for(int i=ind;i<=zh.size();i+=(i&-i)) bit[i]++;}
                                   ~^~~~~~~~~~~
fortune_telling2.cpp: In function 'int main()':
fortune_telling2.cpp:39:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int i=0;i<zh.size();i++) m[zh[i]]=i;
              ~^~~~~~~~~~
fortune_telling2.cpp:46:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<aq[i].size();j++)
               ~^~~~~~~~~~~~~
fortune_telling2.cpp:53:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
  for(int j=0;j<aq[0].size();j++)
              ~^~~~~~~~~~~~~
fortune_telling2.cpp:34:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&k);
  ~~~~~^~~~~~~~~~~~~~
fortune_telling2.cpp:35:29: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=0;i<n;i++) {scanf("%d%d",&a[0][i],&a[1][i]); zh.push_back(a[0][i]); zh.push_back(a[1][i]);}
                        ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
fortune_telling2.cpp:36:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  for(int i=1;i<=k;i++) {scanf("%d",&t[i]); zh.push_back(t[i]);}
                         ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 25 ms 23928 KB Output is correct
2 Correct 51 ms 24168 KB Output is correct
3 Correct 26 ms 24236 KB Output is correct
4 Correct 21 ms 24312 KB Output is correct
5 Correct 22 ms 24312 KB Output is correct
6 Correct 22 ms 24312 KB Output is correct
7 Correct 21 ms 24312 KB Output is correct
8 Correct 22 ms 24332 KB Output is correct
9 Correct 21 ms 24332 KB Output is correct
10 Correct 20 ms 24332 KB Output is correct
11 Correct 21 ms 24396 KB Output is correct
12 Correct 21 ms 24396 KB Output is correct
13 Correct 25 ms 24396 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 83 ms 26204 KB Output is correct
2 Correct 143 ms 28320 KB Output is correct
3 Correct 225 ms 30676 KB Output is correct
4 Correct 307 ms 32596 KB Output is correct
5 Correct 311 ms 32596 KB Output is correct
6 Correct 307 ms 32596 KB Output is correct
7 Correct 302 ms 32720 KB Output is correct
8 Correct 269 ms 32756 KB Output is correct
9 Correct 240 ms 32756 KB Output is correct
10 Correct 145 ms 32756 KB Output is correct
11 Correct 137 ms 32756 KB Output is correct
12 Correct 158 ms 32756 KB Output is correct
13 Correct 190 ms 32756 KB Output is correct
14 Correct 208 ms 32756 KB Output is correct
15 Correct 200 ms 32756 KB Output is correct
16 Correct 276 ms 32756 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 715 ms 39228 KB Output is correct
2 Correct 1044 ms 46440 KB Output is correct
3 Correct 1354 ms 52840 KB Output is correct
4 Execution timed out 2047 ms 69728 KB Time limit exceeded
5 Halted 0 ms 0 KB -